1 /*
2     linear_algebra.cpp:
3 
4     Copyright (C) 2008 by Michael Gogins
5 
6     This file is part of Csound.
7 
8     The Csound Library is free software; you can redistribute it
9     and/or modify it under the terms of the GNU Lesser General Public
10     License as published by the Free Software Foundation; either
11     version 2.1 of the License, or (at your option) any later version.
12 
13     Csound is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16     GNU Lesser General Public License for more details.
17 
18     You should have received a copy of the GNU Lesser General Public
19     License along with Csound; if not, write to the Free Software
20     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21     02110-1301 USA
22 */
23 
24 /**
25  * L I N E A R   A L G E B R A   O P C O D E S   F O R   C S O U N D
26  * Michael Gogins
27  *
28  * These opcodes implement many linear algebra operations,
29  * from scalar, vector, and matrix arithmetic up to
30  * and including QR based eigenvalue decompositions.
31  * The opcodes are designed for digital signal processing,
32  * and of course other mathematical operations,
33  * in the Csound orchestra language.
34  *
35  * The numerical implementation uses the gmm++ library
36  * from http://home.gna.org/getfem/gmm_intro.
37  *
38  * NOTE: SDFT must be #defined in order to build and use these opcodes.
39  *
40  *       For applications with f-sig variables, array arithmetic must be
41  *       performed only when the f-sig is "current," because f-rate
42  *       is some fraction of k-rate; currency can be determined with the
43  *       la_k_current_f opcode.
44  *
45  *       For applications using assignments between real vectors and
46  *       a-rate variables, array arithmetic must be performed only when the
47  *       vectors are "current", because the size of the vector may be
48  *       some integral multiple of ksmps; currency can be determined
49  *       by means of the la_k_current_vr opcode.
50  *
51  * Linear Algebra Data Types
52  * -------------------------
53  *
54  * Mathematical Type  Code  Corresponding Csound Type or Types
55  * -----------------  ----  -------------------------------------------------
56  * real scalar        r     i-rate or k-rate variable
57  * complex scalar     c     pair of i-rate or k-rate variables, e.g. "kr, ki"
58  * real vector        vr    i-rate variable holding address of array
59  *                    a     a-rate variable
60  *                    t     function table number
61  * complex vector     vc    i-rate variable holding address of array
62  *                    f     fsig variable
63  * real matrix        mr    i-rate variable holding address of array
64  * complex matrix     mc    i-rate variable holding address of array
65  *
66  * All arrays are 0-based; the first index iterates rows to give columns,
67  * the second index iterates columns to give elements.
68  *
69  * All arrays are general and dense; banded, Hermitian, symmetric
70  * and sparse routines are not implemented.
71  *
72  * An array can be of type code vr, vc, mr, or mc
73  * and is stored in an i-rate object.
74  * In orchestra code, an array is passed as a
75  * MYFLT i-rate variable that contains the address
76  * of the array object, which is actually stored
77  * in the allocator opcode instance.
78  * Although array variables are i-rate, of course
79  * their values and even shapes may change at i-rate or k-rate.
80  *
81  * All operands must be pre-allocated; except for the creation
82  * opcodes, no opcode ever allocates any arrays.
83  * This is true even if the array appears on the
84  * left-hand side of an opcode! However, some operations
85  * may reshape arrays to hold results.
86  *
87  * Arrays are automatically deallocated when their instrument
88  * is deallocated.
89  *
90  * Not only for more efficient performance,
91  * but also to make it easier to remember opcode names,
92  * the performance rate, output value types, operation names,
93  * and input value types are deterministically
94  * encoded into the opcode name:
95  * 1. "la" for "linear algebra opcode family".
96  * 2. "i" or "k" for performance rate.
97  * 3. Type code(s) (see above table) for output value(s),
98  *    but only if the type is not implicit from the input values.
99  * 4. Operation name: common mathematical name
100  *    (preferred) or abbreviation.
101  * 5. Type code(s) for input values, if not implicit.
102  *
103  * For details, see the gmm++ documentation at
104  * http://download.gna.org/getfem/doc/gmmuser.pdf.
105  *
106  * Array Creation
107  * --------------
108  *
109  * ivr                         la_i_vr_create        irows
110  * ivc                         la_i_vc_create        irows
111  * imr                         la_i_mr_create        irows, icolumns  [,
112  odiagonal]
113  * imc                         la_i_mc_create        irows, icolumns
114                                                      [, odiagonal_r,
115  odiagonal_i]
116  *
117  * Array Introspection
118  * -------------------
119  *
120  * irows                       la_i_size_vr          ivr
121  * irows                       la_i_size_vc          ivc
122  * irows, icolumns             la_i_size_mr          imr
123  * irows, icolumns             la_i_size_mc          imc
124  *
125  * kfiscurrent                 la_k_current_f        fsig
126  * kvriscurrent                la_k_current_vr       ivr
127  *
128  *                             la_i_print_vr         ivr
129  *                             la_i_print_vc         ivc
130  *                             la_i_print_mr         imr
131  *                             la_i_print_mc         imc
132  *
133  * Array Assignment and Conversion
134  * -------------------------------
135  *
136  * ivr                         la_i_assign_vr        ivr
137  * ivr                         la_k_assign_vr        ivr
138  * ivc                         la_i_assign_vc        ivc
139  * ivc                         la_k_assign_vc        ivr
140  * imr                         la_i_assign_mr        imr
141  * imr                         la_k_assign_mr        imr
142  * imc                         la_i_assign_mc        imc
143  * imc                         la_k_assign_mc        imr
144  *
145  * NOTE: Assignments from tables or fsigs will resize vectors.
146  *       Assignments to or from asigs are incremental -- ksmps
147  *       frames are copied each kperiod and the array index
148  *       wraps around as required.
149  *
150  * ivr                         la_k_assign_a         asig
151  * ivr                         la_i_assign_t         itablenumber
152  * ivr                         la_k_assign_t         itablenumber
153  * ivc                         la_k_assign_f         fsig
154  *
155  * asig                        la_k_a_assign         ivr
156  * itablenum                   la_i_t_assign         ivr
157  * itablenum                   la_k_t_assign         ivr
158  * fsig                        la_k_f_assign         ivc
159  *
160  * Fill Arrays with Random Elements
161  * --------------------------------
162  *
163  * ivr                         la_i_random_vr        [ifill_fraction]
164  * ivr                         la_k_random_vr        [kfill_fraction]
165  * ivc                         la_i_random_vc        [ifill_fraction]
166  * ivc                         la_k_random_vc        [kfill_fraction]
167  * imr                         la_i_random_mr        [ifill_fraction]
168  * imr                         la_k_random_mr        [kfill_fraction]
169  * imc                         la_i_random_mc        [ifill_fraction]
170  * imc                         la_k_random_mc        [kfill_fraction]
171  *
172  * Array Element Access
173  * --------------------
174  *
175  * ivr                         la_i_vr_set           irow, ivalue
176  * kvr                         la_k_vr_set           krow, kvalue
177  * ivc                         la_i_vc_set           irow, ivalue_r, ivalue_i
178  * kvc                         la_k_vc_set           krow, kvalue_r, kvalue_i
179  * imr                         la_i mr_set           irow, icolumn, ivalue
180  * kmr                         la_k mr_set           krow, kcolumn, ivalue
181  * imc                         la_i_mc_set           irow, icolumn, ivalue_r,
182                                                                     ivalue_i
183  * kmc                         la_k_mc_set           krow, kcolumn, kvalue_r,
184                                                                     kvalue_i
185  *
186  * ivalue                      la_i_get_vr           ivr, irow
187  * kvalue                      la_k_get_vr           ivr, krow,
188  * ivalue_r, ivalue_i          la_i_get_vc           ivc, irow
189  * kvalue_r, kvalue_i          la_k_get_vc           ivc, krow
190  * ivalue                      la_i_get_mr           imr, irow, icolumn
191  * kvalue                      la_k_get_mr           imr, krow, kcolumn
192  * ivalue_r, ivalue_i          la_i_get_mc           imc, irow, icolumn
193  * kvalue_r, kvalue_i          la_k_get_mc           imc, krow, kcolumn
194  *
195  * Single Array Operations
196  * -----------------------
197  *
198  * imr                         la_i_transpose_mr     imr
199  * imr                         la_k_transpose_mr     imr
200  * imc                         la_i_transpose_mc     imc
201  * imc                         la_k_transpose_mc     imc
202 
203  * ivr                         la_i_conjugate_vr     ivr
204  * ivr                         la_k_conjugate_vr     ivr
205  * ivc                         la_i_conjugate_vc     ivc
206  * ivc                         la_k_conjugate_vc     ivc
207  * imr                         la_i_conjugate_mr     imr
208  * imr                         la_k_conjugate_mr     imr
209  * imc                         la_i_conjugate_mc     imc
210  * imc                         la_k_conjugate_mc     imc
211  *
212  * Scalar Operations
213  * -----------------
214  *
215  * ir                          la_i_norm1_vr         ivr
216  * kr                          la_k_norm1_vr         ivc
217  * ir                          la_i_norm1_vc         ivc
218  * kr                          la_k_norm1_vc         ivc
219  * ir                          la_i_norm1_mr         imr
220  * kr                          la_k_norm1_mr         imr
221  * ir                          la_i_norm1_mc         imc
222  * kr                          la_k_norm1_mc         imc
223  *
224  * ir                          la_i_norm_euclid_vr   ivr
225  * kr                          la_k_norm_euclid_vr   ivr
226  * ir                          la_i_norm_euclid_vc   ivc
227  * kr                          la_k_norm_euclid_vc   ivc
228  * ir                          la_i_norm_euclid_mr   mvr
229  * kr                          la_k_norm_euclid_mr   mvr
230  * ir                          la_i_norm_euclid_mc   mvc
231  * kr                          la_k_norm_euclid_mc   mvc
232  *
233  * ir                          la_i_distance_vr      ivr
234  * kr                          la_k_distance_vr      ivr
235  * ir                          la_i_distance_vc      ivc
236  * kr                          la_k_distance_vc      ivc
237  *
238  * ir                          la_i_norm_max         imr
239  * kr                          la_k_norm_max         imc
240  * ir                          la_i_norm_max         imr
241  * kr                          la_k_norm_max         imc
242  *
243  * ir                          la_i_norm_inf_vr      ivr
244  * kr                          la_k_norm_inf_vr      ivr
245  * ir                          la_i_norm_inf_vc      ivc
246  * kr                          la_k_norm_inf_vc      ivc
247  * ir                          la_i_norm_inf_mr      imr
248  * kr                          la_k_norm_inf_mr      imr
249  * ir                          la_i_norm_inf_mc      imc
250  * kr                          la_k_norm_inf_mc      imc
251  *
252  * ir                          la_i_trace_mr         imr
253  * kr                          la_k_trace_mr         imr
254  * ir, ii                      la_i_trace_mc         imc
255  * kr, ki                      la_k_trace_mc         imc
256  *
257  * ir                          la_i_lu_det           imr
258  * kr                          la_k_lu_det           imr
259  * ir                          la_i_lu_det           imc
260  * kr                          la_k_lu_det           imc
261  *
262  * Elementwise Array-Array Operations
263  * ----------------------------------
264  *
265  * ivr                         la_i_add_vr           ivr_a, ivr_b
266  * ivc                         la_k_add_vc           ivc_a, ivc_b
267  * imr                         la_i_add_mr           imr_a, imr_b
268  * imc                         la_k_add_mc           imc_a, imc_b
269  *
270  * ivr                         la_i_subtract_vr      ivr_a, ivr_b
271  * ivc                         la_k_subtract_vc      ivc_a, ivc_b
272  * imr                         la_i_subtract_mr      imr_a, imr_b
273  * imc                         la_k_subtract_mc      imc_a, imc_b
274  *
275  * ivr                         la_i_multiply_vr      ivr_a, ivr_b
276  * ivc                         la_k_multiply_vc      ivc_a, ivc_b
277  * imr                         la_i_multiply_mr      imr_a, imr_b
278  * imc                         la_k_multiply_mc      imc_a, imc_b
279  *
280  * ivr                         la_i_divide_vr        ivr_a, ivr_b
281  * ivc                         la_k_divide_vc        ivc_a, ivc_b
282  * imr                         la_i_divide_mr        imr_a, imr_b
283  * imc                         la_k_divide_mc        imc_a, imc_b
284  *
285  * Inner Products
286  * --------------
287  *
288  * ir                          la_i_dot_vr           ivr_a, ivr_b
289  * kr                          la_k_dot_vr           ivr_a, ivr_b
290  * ir, ii                      la_i_dot_vc           ivc_a, ivc_b
291  * kr, ki                      la_k_dot_vc           ivc_a, ivc_b
292  *
293  * imr                         la_i_dot_mr           imr_a, imr_b
294  * imr                         la_k_dot_mr           imr_a, imr_b
295  * imc                         la_i_dot_mc           imc_a, imc_b
296  * imc                         la_k_dot_mc           imc_a, imc_b
297  *
298  * ivr                         la_i_dot_mr_vr        imr_a, ivr_b
299  * ivr                         la_k_dot_mr_vr        imr_a, ivr_b
300  * ivc                         la_i_dot_mc_vc        imc_a, ivc_b
301  * ivc                         la_k_dot_mc_vc        imc_a, ivc_b
302  *
303  * Matrix Inversion
304  * ----------------
305  *
306  * imr, icondition             la_i_invert_mr        imr
307  * imr, kcondition             la_k_invert_mr        imr
308  * imc, icondition             la_i_invert_mc        imc
309  * imc, kcondition             la_k_invert_mc        imc
310  *
311  * Matrix Decompositions and Solvers
312  * ---------------------------------
313  *
314  * ivr                         la_i_upper_solve_mr   imr [, j_1_diagonal]
315  * ivr                         la_k_upper_solve_mr   imr [, j_1_diagonal]
316  * ivc                         la_i_upper_solve_mc   imc [, j_1_diagonal]
317  * ivc                         la_k_upper_solve_mc   imc [, j_1_diagonal]
318  *
319  * ivr                         la_i_lower_solve_mr   imr [, j_1_diagonal]
320  * ivr                         la_k_lower_solve_mr   imr [, j_1_diagonal]
321  * ivc                         la_i_lower_solve_mc   imc [, j_1_diagonal]
322  * ivc                         la_k_lower_solve_mc   imc [, j_1_diagonal]
323  *
324  * imr, ivr_pivot, isize       la_i_lu_factor_mr     imr
325  * imr, ivr_pivot, ksize       la_k_lu_factor_mr     imr
326  * imc, ivr_pivot, isize       la_i_lu_factor_mc     imc
327  * imc, ivr_pivot, ksize       la_k_lu_factor_mc     imc
328  *
329  * ivr_x                       la_i_lu_solve_mr      imr, ivr_b
330  * ivr_x                       la_k_lu_solve_mr      imr, ivr_b
331  * ivc_x                       la_i_lu_solve_mc      imc, ivc_b
332  * ivc_x                       la_k_lu_solve_mc      imc, ivc_b
333  *
334  * imr_q, imr_r                la_i_qr_factor_mr     imr
335  * imr_q, imr_r                la_k_qr_factor_mr     imr
336  * imc_q, imc_r                la_i_qr_factor_mc     imc
337  * imc_q, imc_r                la_k_qr_factor_mc     imc
338  *
339  * ivr_eig_vals                la_i_qr_eigen_mr      imr, i_tolerance
340  * ivr_eig_vals                la_k_qr_eigen_mr      imr, k_tolerance
341  * ivr_eig_vals                la_i_qr_eigen_mc      imc, i_tolerance
342  * ivr_eig_vals                la_k_qr_eigen_mc      imc, k_tolerance
343  *
344  * NOTE: Matrix must be Hermitian in order to compute eigenvectors.
345  *
346  * ivr_eig_vals, imr_eig_vecs  la_i_qr_sym_eigen_mr  imr, i_tolerance
347  * ivr_eig_vals, imr_eig_vecs  la_k_qr_sym_eigen_mr  imr, k_tolerance
348  * ivc_eig_vals, imc_eig_vecs  la_i_qr_sym_eigen_mc  imc, i_tolerance
349  * ivc_eig_vals, imc_eig_vecs  la_k_qr_sym_eigen_mc  imc, k_tolerance
350  *
351  */
352 
353 extern "C" {
354 // a-rate, k-rate, FUNC, SPECDAT
355 #include <csdl.h>
356 // PVSDAT
357 #include <pstream.h>
358 }
359 
360 #ifdef ST
361 #undef ST
362 #endif
363 
364 #ifdef WR
365 #undef WR
366 #endif
367 
368 #include <OpcodeBase.hpp>
369 #include <complex>
370 #include <gmm/gmm.h>
371 #include <sstream>
372 #include <vector>
373 
374 using namespace csound;
375 
operator <<(std::ostream & o,const std::vector<double> & m)376 static std::ostream &operator<<(std::ostream &o, const std::vector<double> &m) {
377   gmm::write(o, m);
378   return o;
379 }
380 
operator <<(std::ostream & o,const std::vector<std::complex<double>> & m)381 static std::ostream &operator<<(std::ostream &o,
382                                 const std::vector<std::complex<double>> &m) {
383   gmm::write(o, m);
384   return o;
385 }
386 
387 /**
388  * Template union for safely and efficiently
389  * typecasting the value of a MYFLT variable
390  * to the address of an array, and vice versa.
391  */
392 template <typename A, typename F> struct ArrayCaster {
393   union {
394     A *a;
395     F f;
396   };
397 };
398 
399 /**
400  * Safely and efficiently typecast the address
401  * of an array to the value of a MYFLT variable.
402  */
tof(A * a,F * f)403 template <typename A, typename F> void tof(A *a, F *f) {
404   ArrayCaster<A, F> arrayCaster;
405   arrayCaster.a = a;
406   *f = arrayCaster.f;
407 };
408 
409 /**
410  * Safely and efficiently typecast the value of a
411  * a MYFLT variable to the address of an array.
412  */
toa(F * f,A * & a)413 template <typename A, typename F> void toa(F *f, A *&a) {
414   ArrayCaster<A, F> arrayCaster;
415   arrayCaster.f = *f;
416   a = arrayCaster.a;
417 };
418 
419 class la_i_vr_create_t : public OpcodeNoteoffBase<la_i_vr_create_t> {
420 public:
421   MYFLT *i_vr;
422   MYFLT *i_rows;
423   std::vector<MYFLT> vr;
init(CSOUND *)424   int init(CSOUND *) {
425     vr.resize(size_t(*i_rows));
426     tof(this, i_vr);
427     return OK;
428   }
noteoff(CSOUND *)429   int noteoff(CSOUND *) {
430     vr.resize(0);
431     return OK;
432   }
433 };
434 
435 class la_i_vc_create_t : public OpcodeNoteoffBase<la_i_vc_create_t> {
436 public:
437   MYFLT *i_vc;
438   MYFLT *i_rows;
439   std::vector<std::complex<MYFLT>> vc;
init(CSOUND *)440   int init(CSOUND *) {
441     vc.resize(size_t(*i_rows));
442     tof(this, i_vc);
443     return OK;
444   }
noteoff(CSOUND *)445   int noteoff(CSOUND *) {
446     vc.resize(0);
447     return OK;
448   }
449 };
450 
451 class la_i_mr_create_t : public OpcodeNoteoffBase<la_i_mr_create_t> {
452 public:
453   MYFLT *i_mr;
454   MYFLT *i_rows;
455   MYFLT *i_columns;
456   MYFLT *o_diagonal;
457   gmm::dense_matrix<MYFLT> mr;
init(CSOUND *)458   int init(CSOUND *) {
459     gmm::resize(mr, size_t(*i_rows), size_t(*i_columns));
460     if (*o_diagonal) {
461       for (size_t i = 0, n = size_t(*i_rows); i < n; ++i) {
462         mr(i, i) = *o_diagonal;
463       }
464     }
465     tof(this, i_mr);
466     return OK;
467   }
noteoff(CSOUND *)468   int noteoff(CSOUND *) {
469     mr.resize(0, 0);
470     return OK;
471   }
472 };
473 
474 class la_i_mc_create_t : public OpcodeNoteoffBase<la_i_mc_create_t> {
475 public:
476   MYFLT *i_mc;
477   MYFLT *i_rows;
478   MYFLT *i_columns;
479   MYFLT *o_diagonal_r;
480   MYFLT *o_diagonal_i;
481   gmm::dense_matrix<std::complex<MYFLT>> mc;
init(CSOUND *)482   int init(CSOUND *) {
483     gmm::resize(mc, size_t(*i_rows), size_t(*i_columns));
484     if (*o_diagonal_r || *o_diagonal_i) {
485       for (size_t i = 0, n = size_t(*i_rows); i < n; ++i) {
486         mc(i, i) = std::complex<MYFLT>(*o_diagonal_r, *o_diagonal_i);
487       }
488     }
489     tof(this, i_mc);
490     return OK;
491   }
noteoff(CSOUND *)492   int noteoff(CSOUND *) {
493     mc.resize(0, 0);
494     return OK;
495   }
496 };
497 
498 class la_i_size_vr_t : public OpcodeBase<la_i_size_vr_t> {
499 public:
500   MYFLT *i_size;
501   MYFLT *i_vr;
init(CSOUND *)502   int init(CSOUND *) {
503     la_i_vr_create_t *array = 0;
504     toa(i_vr, array);
505     *i_size = (MYFLT)gmm::vect_size(array->vr);
506     return OK;
507   }
508 };
509 
510 class la_i_size_vc_t : public OpcodeBase<la_i_size_vc_t> {
511 public:
512   MYFLT *i_size;
513   MYFLT *i_vc;
init(CSOUND *)514   int init(CSOUND *) {
515     la_i_vc_create_t *array = 0;
516     toa(i_vc, array);
517     *i_size = (MYFLT)gmm::vect_size(array->vc);
518     return OK;
519   }
520 };
521 
522 class la_i_size_mr_t : public OpcodeBase<la_i_size_mr_t> {
523 public:
524   MYFLT *i_rows;
525   MYFLT *i_columns;
526   MYFLT *i_mr;
init(CSOUND *)527   int init(CSOUND *) {
528     la_i_mr_create_t *array = 0;
529     toa(i_mr, array);
530     *i_rows = (MYFLT)gmm::mat_nrows(array->mr);
531     *i_columns = (MYFLT)gmm::mat_ncols(array->mr);
532     return OK;
533   }
534 };
535 
536 class la_i_size_mc_t : public OpcodeBase<la_i_size_mc_t> {
537 public:
538   MYFLT *i_rows;
539   MYFLT *i_columns;
540   MYFLT *i_mc;
init(CSOUND *)541   int init(CSOUND *) {
542     la_i_mc_create_t *array = 0;
543     toa(i_mc, array);
544     *i_rows = (MYFLT)gmm::mat_nrows(array->mc);
545     *i_columns = (MYFLT)gmm::mat_ncols(array->mc);
546     return OK;
547   }
548 };
549 
550 /**
551  * Return 1 if the input f-sig is current
552  * (i.e., if its value might change in the next kperiod);
553  * return 0 if the input f-sig is not current.
554  *
555  * Example:
556  *
557  * kcurrent la_k_current_f fsig
558  * if (kcurrent == 1.0) then
559  * ; arithmetic on fsig here...
560  * endif
561  */
562 class la_k_current_f_t : public OpcodeBase<la_k_current_f_t> {
563 public:
564   MYFLT *k_current;
565   PVSDAT *f_sig;
566   size_t last_frame;
init(CSOUND *)567   int init(CSOUND *) {
568     last_frame = f_sig->framecount;
569     return OK;
570   }
kontrol(CSOUND *)571   int kontrol(CSOUND *) {
572     if (last_frame < f_sig->framecount) {
573       last_frame = f_sig->framecount;
574       *k_current = 1.0;
575     } else {
576       *k_current = 0.0;
577     }
578     return OK;
579   }
580 };
581 
582 /**
583  * Return 1 if the real vector is current (i.e., its
584  * current index equals 0); return 0 if the input
585  * real vector is not current. A real vector is current
586  * in the very first kperiod of performance,
587  * and at each subsequent kperiod where ksmps has
588  * accumulated past the end of the vector and
589  * has wrapped back to index 0. For this to be
590  * possible, the size of the vector must be an integral
591  * multiple of ksmps.
592  *
593  * Example:
594  *
595  * ; FIRST, assignments from a-rate variables to vectors.
596  * kcurrent la_k_current_vr ivr
597  * if (kcurrent == 1.0) then
598  * ; SECOND, arithmetic with current vectors.
599  * endif
600  * ; THIRD, assignments from vectors to a-rate variables.
601  */
602 
603 class la_k_current_vr_t : public OpcodeBase<la_k_current_vr_t> {
604 public:
605   MYFLT *k_current;
606   MYFLT *rhs_ivr;
607   la_i_vr_create_t *rhs;
608   size_t ksmps;
609   size_t vector_size;
init(CSOUND * csound)610   int init(CSOUND *csound) {
611     rhs = 0;
612     toa(rhs_ivr, rhs);
613     ksmps = opds.insdshead->ksmps;
614     vector_size = gmm::vect_size(rhs->vr);
615     return OK;
616   }
kontrol(CSOUND * csound)617   int kontrol(CSOUND *csound) {
618     size_t frame_count = opds.insdshead->kcounter * ksmps;
619     size_t index = frame_count % vector_size;
620     if (index == 0) {
621       *k_current = 1.0;
622     } else {
623       *k_current = 0.0;
624     }
625     return OK;
626   }
627 };
628 
629 class la_i_print_vr_t : public OpcodeBase<la_i_print_vr_t> {
630 public:
631   MYFLT *i_vr;
init(CSOUND * csound)632   int init(CSOUND *csound) {
633     la_i_vr_create_t *array = 0;
634     toa(i_vr, array);
635     std::ostringstream stream;
636     stream << array->vr << std::endl;
637     csound->Message(csound, "%s", stream.str().c_str());
638     return OK;
639   }
640 };
641 
642 class la_i_print_vc_t : public OpcodeBase<la_i_print_vc_t> {
643 public:
644   MYFLT *i_vc;
init(CSOUND * csound)645   int init(CSOUND *csound) {
646     la_i_vc_create_t *array = 0;
647     toa(i_vc, array);
648     std::ostringstream stream;
649     stream << array->vc << std::endl;
650     csound->Message(csound, "%s", stream.str().c_str());
651     return OK;
652   }
653 };
654 
655 class la_i_print_mr_t : public OpcodeBase<la_i_print_mr_t> {
656 public:
657   MYFLT *i_mr;
init(CSOUND * csound)658   int init(CSOUND *csound) {
659     la_i_mr_create_t *array = 0;
660     toa(i_mr, array);
661     std::ostringstream stream;
662     stream << array->mr << std::endl;
663     csound->Message(csound, "%s", stream.str().c_str());
664     return OK;
665   }
666 };
667 
668 class la_i_print_mc_t : public OpcodeBase<la_i_print_mc_t> {
669 public:
670   MYFLT *i_mc;
init(CSOUND * csound)671   int init(CSOUND *csound) {
672     la_i_mc_create_t *array = 0;
673     toa(i_mc, array);
674     std::ostringstream stream;
675     stream << array->mc << std::endl;
676     csound->Message(csound, "%s", stream.str().c_str());
677     return OK;
678   }
679 };
680 
681 class la_i_assign_vr_t : public OpcodeBase<la_i_assign_vr_t> {
682 public:
683   MYFLT *i_vr_lhs;
684   MYFLT *i_vr_rhs;
685   la_i_vr_create_t *lhs;
686   la_i_vr_create_t *rhs;
init(CSOUND * csound)687   int init(CSOUND *csound) {
688     toa(i_vr_lhs, lhs);
689     toa(i_vr_rhs, rhs);
690     gmm::copy(rhs->vr, lhs->vr);
691     return OK;
692   }
693 };
694 
695 class la_k_assign_vr_t : public OpcodeBase<la_k_assign_vr_t> {
696 public:
697   MYFLT *i_vr_lhs;
698   MYFLT *i_vr_rhs;
699   la_i_vr_create_t *lhs;
700   la_i_vr_create_t *rhs;
init(CSOUND * csound)701   int init(CSOUND *csound) {
702     toa(i_vr_lhs, lhs);
703     toa(i_vr_rhs, rhs);
704     return OK;
705   }
kontrol(CSOUND * csound)706   int kontrol(CSOUND *csound) {
707     gmm::copy(rhs->vr, lhs->vr);
708     return OK;
709   }
710 };
711 
712 class la_i_assign_vc_t : public OpcodeBase<la_i_assign_vc_t> {
713 public:
714   MYFLT *i_vc_lhs;
715   MYFLT *i_vc_rhs;
716   la_i_vc_create_t *lhs;
717   la_i_vc_create_t *rhs;
init(CSOUND * csound)718   int init(CSOUND *csound) {
719     toa(i_vc_lhs, lhs);
720     toa(i_vc_rhs, rhs);
721     gmm::copy(rhs->vc, lhs->vc);
722     return OK;
723   }
724 };
725 
726 class la_k_assign_vc_t : public OpcodeBase<la_k_assign_vc_t> {
727 public:
728   MYFLT *i_vc_lhs;
729   MYFLT *i_vc_rhs;
730   la_i_vc_create_t *lhs;
731   la_i_vc_create_t *rhs;
init(CSOUND * csound)732   int init(CSOUND *csound) {
733     toa(i_vc_lhs, lhs);
734     toa(i_vc_rhs, rhs);
735     return OK;
736   }
kontrol(CSOUND * csound)737   int kontrol(CSOUND *csound) {
738     gmm::copy(rhs->vc, lhs->vc);
739     return OK;
740   }
741 };
742 
743 class la_i_assign_mr_t : public OpcodeBase<la_i_assign_mr_t> {
744 public:
745   MYFLT *i_mr_lhs;
746   MYFLT *i_mr_rhs;
747   la_i_mr_create_t *lhs;
748   la_i_mr_create_t *rhs;
init(CSOUND * csound)749   int init(CSOUND *csound) {
750     toa(i_mr_lhs, lhs);
751     toa(i_mr_rhs, rhs);
752     gmm::copy(rhs->mr, lhs->mr);
753     return OK;
754   }
755 };
756 
757 class la_k_assign_mr_t : public OpcodeBase<la_k_assign_mr_t> {
758 public:
759   MYFLT *i_mr_lhs;
760   MYFLT *i_mr_rhs;
761   la_i_mr_create_t *lhs;
762   la_i_mr_create_t *rhs;
init(CSOUND * csound)763   int init(CSOUND *csound) {
764     toa(i_mr_lhs, lhs);
765     toa(i_mr_rhs, rhs);
766     return OK;
767   }
kontrol(CSOUND * csound)768   int kontrol(CSOUND *csound) {
769     gmm::copy(rhs->mr, lhs->mr);
770     return OK;
771   }
772 };
773 
774 class la_i_assign_mc_t : public OpcodeBase<la_i_assign_mc_t> {
775 public:
776   MYFLT *i_mc_lhs;
777   MYFLT *i_mc_rhs;
778   la_i_mc_create_t *lhs;
779   la_i_mc_create_t *rhs;
init(CSOUND * csound)780   int init(CSOUND *csound) {
781     toa(i_mc_lhs, lhs);
782     toa(i_mc_rhs, rhs);
783     gmm::copy(rhs->mc, lhs->mc);
784     return OK;
785   }
786 };
787 
788 class la_k_assign_mc_t : public OpcodeBase<la_k_assign_mc_t> {
789 public:
790   MYFLT *i_mc_lhs;
791   MYFLT *i_mc_rhs;
792   la_i_mc_create_t *lhs;
793   la_i_mc_create_t *rhs;
init(CSOUND * csound)794   int init(CSOUND *csound) {
795     toa(i_mc_lhs, lhs);
796     toa(i_mc_rhs, rhs);
797     return OK;
798   }
kontrol(CSOUND * csound)799   int kontrol(CSOUND *csound) {
800     gmm::copy(rhs->mc, lhs->mc);
801     return OK;
802   }
803 };
804 
805 class la_k_assign_a_t : public OpcodeBase<la_k_assign_a_t> {
806 public:
807   MYFLT *i_vr;
808   MYFLT *a_a;
809   la_i_vr_create_t *lhs;
810   size_t ksmps;
811   size_t vector_size;
init(CSOUND * csound)812   int init(CSOUND *csound) {
813     toa(i_vr, lhs);
814     ksmps = opds.insdshead->ksmps;
815     vector_size = gmm::vect_size(lhs->vr);
816     return OK;
817   }
kontrol(CSOUND * csound)818   int kontrol(CSOUND *csound) {
819     uint32_t offset = opds.insdshead->ksmps_offset;
820     uint32_t early = opds.insdshead->ksmps_no_end;
821     size_t frame_count = opds.insdshead->ksmps * ksmps;
822     size_t array_i = frame_count % vector_size;
823     if (UNLIKELY(early))
824       ksmps -= early;
825     for (size_t i = offset; i < ksmps; ++i, ++array_i) {
826       lhs->vr[array_i] = a_a[i];
827     }
828     return OK;
829   }
830 };
831 
832 class la_i_assign_t_t : public OpcodeBase<la_i_assign_t_t> {
833 public:
834   MYFLT *i_vr;
835   MYFLT *i_tablenumber;
836   la_i_vr_create_t *lhs;
837   int tablenumber;
838   int n;
init(CSOUND * csound)839   int init(CSOUND *csound) {
840     toa(i_vr, lhs);
841     tablenumber = int(std::floor(*i_tablenumber));
842     n = csound->TableLength(csound, tablenumber);
843     gmm::resize(lhs->vr, n);
844     for (int i = 0; i < n; ++i) {
845       lhs->vr[i] = csound->TableGet(csound, tablenumber, i);
846     }
847     return OK;
848   }
849 };
850 
851 class la_k_assign_t_t : public OpcodeBase<la_k_assign_t_t> {
852 public:
853   MYFLT *i_vr;
854   MYFLT *i_tablenumber;
855   la_i_vr_create_t *lhs;
856   int tablenumber;
857   int n;
init(CSOUND * csound)858   int init(CSOUND *csound) {
859     toa(i_vr, lhs);
860     tablenumber = int(std::floor(*i_tablenumber));
861     n = csound->TableLength(csound, tablenumber);
862     gmm::resize(lhs->vr, n);
863     return OK;
864   }
kontrol(CSOUND * csound)865   int kontrol(CSOUND *csound) {
866     for (int i = 0; i < n; ++i) {
867       lhs->vr[i] = csound->TableGet(csound, tablenumber, i);
868     }
869     return OK;
870   }
871 };
872 
873 class la_k_assign_f_t : public OpcodeBase<la_k_assign_f_t> {
874 public:
875   MYFLT *i_vc;
876   PVSDAT *f_fsig;
877   la_i_vc_create_t *lhs;
878   int n;
879   std::complex<MYFLT> *f;
init(CSOUND * csound)880   int init(CSOUND *csound) {
881     toa(i_vc, lhs);
882     n = f_fsig->N;
883     // std::complex<MYFLT> has the same layout as CMPLX.
884     f = (std::complex<MYFLT> *)f_fsig->frame.auxp;
885     gmm::resize(lhs->vc, n);
886     return OK;
887   }
kontrol(CSOUND * csound)888   int kontrol(CSOUND *csound) {
889     for (int i = 0; i < n; ++i) {
890       lhs->vc[i] = f[i];
891     }
892     return OK;
893   }
894 };
895 
896 class la_k_a_assign_t : public OpcodeBase<la_k_a_assign_t> {
897 public:
898   MYFLT *a_a;
899   MYFLT *i_vr;
900   la_i_vr_create_t *rhs;
901   size_t ksmps;
init(CSOUND * csound)902   int init(CSOUND *csound) {
903     toa(i_vr, rhs);
904     ksmps = opds.insdshead->ksmps;
905     return OK;
906   }
kontrol(CSOUND * csound)907   int kontrol(CSOUND *csound) {
908     uint32_t offset = opds.insdshead->ksmps_offset;
909     uint32_t early = opds.insdshead->ksmps_no_end;
910     memset(a_a, '\0', offset * sizeof(MYFLT));
911     size_t frameCount = opds.insdshead->kcounter * opds.insdshead->ksmps;
912     size_t vectorSize = gmm::vect_size(rhs->vr);
913     size_t array_i = frameCount % vectorSize;
914     if (UNLIKELY(early))
915       ksmps -= early;
916     for (size_t i = 0; i < ksmps; ++i, ++array_i) {
917       a_a[i] = rhs->vr[array_i];
918     }
919     return OK;
920   }
921 };
922 
923 class la_i_t_assign_t : public OpcodeBase<la_i_t_assign_t> {
924 public:
925   MYFLT *i_tablenumber;
926   MYFLT *i_vr;
927   la_i_vr_create_t *rhs;
928   int tablenumber;
929   int n;
init(CSOUND * csound)930   int init(CSOUND *csound) {
931     toa(i_vr, rhs);
932     tablenumber = int(std::floor(*i_tablenumber));
933     n = csound->TableLength(csound, tablenumber);
934     gmm::resize(rhs->vr, n);
935     for (int i = 0; i < n; ++i) {
936       csound->TableSet(csound, tablenumber, i, rhs->vr[i]);
937     }
938     return OK;
939   }
940 };
941 
942 class la_k_t_assign_t : public OpcodeBase<la_k_t_assign_t> {
943 public:
944   MYFLT *i_tablenumber;
945   MYFLT *i_vr;
946   la_i_vr_create_t *rhs;
947   int tablenumber;
948   int n;
init(CSOUND * csound)949   int init(CSOUND *csound) {
950     toa(i_vr, rhs);
951     tablenumber = int(std::floor(*i_tablenumber));
952     n = csound->TableLength(csound, tablenumber);
953     gmm::resize(rhs->vr, n);
954     return OK;
955   }
kontrol(CSOUND * csound)956   int kontrol(CSOUND *csound) {
957     for (int i = 0; i < n; ++i) {
958       csound->TableSet(csound, tablenumber, i, rhs->vr[i]);
959     }
960     return OK;
961   }
962 };
963 
964 class la_k_f_assign_t : public OpcodeBase<la_k_f_assign_t> {
965 public:
966   PVSDAT *f_fsig;
967   MYFLT *i_vc;
968   la_i_vc_create_t *rhs;
969   int n;
970   std::complex<MYFLT> *f;
init(CSOUND * csound)971   int init(CSOUND *csound) {
972     toa(i_vc, rhs);
973     n = f_fsig->N;
974     // std::complex<MYFLT> has the same layout as CMPLX.
975     f = (std::complex<MYFLT> *)f_fsig->frame.auxp;
976     gmm::resize(rhs->vc, n);
977     return OK;
978   }
kontrol(CSOUND * csound)979   int kontrol(CSOUND *csound) {
980     for (int i = 0; i < n; ++i) {
981       f[i] = rhs->vc[i];
982     }
983     return OK;
984   }
985 };
986 
987 class la_i_random_vr_t : public OpcodeBase<la_i_random_vr_t> {
988 public:
989   MYFLT *i_vr_lhs;
990   MYFLT *i_fraction;
991   la_i_vr_create_t *lhs;
init(CSOUND * csound)992   int init(CSOUND *csound) {
993     toa(i_vr_lhs, lhs);
994     gmm::fill_random(lhs->vr, *i_fraction);
995     return OK;
996   }
997 };
998 
999 class la_k_random_vr_t : public OpcodeBase<la_k_random_vr_t> {
1000 public:
1001   MYFLT *i_vr_lhs;
1002   MYFLT *i_fraction;
1003   la_i_vr_create_t *lhs;
init(CSOUND * csound)1004   int init(CSOUND *csound) {
1005     toa(i_vr_lhs, lhs);
1006     return OK;
1007   }
kontrol(CSOUND * csound)1008   int kontrol(CSOUND *csound) {
1009     gmm::fill_random(lhs->vr, *i_fraction);
1010     return OK;
1011   }
1012 };
1013 
1014 class la_i_random_vc_t : public OpcodeBase<la_i_random_vc_t> {
1015 public:
1016   MYFLT *i_vc_lhs;
1017   MYFLT *i_fraction;
1018   la_i_vc_create_t *lhs;
init(CSOUND * csound)1019   int init(CSOUND *csound) {
1020     toa(i_vc_lhs, lhs);
1021     gmm::fill_random(lhs->vc, *i_fraction);
1022     return OK;
1023   }
1024 };
1025 
1026 class la_k_random_vc_t : public OpcodeBase<la_k_random_vc_t> {
1027 public:
1028   MYFLT *i_vc_lhs;
1029   MYFLT *i_fraction;
1030   la_i_vc_create_t *lhs;
init(CSOUND * csound)1031   int init(CSOUND *csound) {
1032     toa(i_vc_lhs, lhs);
1033     return OK;
1034   }
kontrol(CSOUND * csound)1035   int kontrol(CSOUND *csound) {
1036     gmm::fill_random(lhs->vc, *i_fraction);
1037     return OK;
1038   }
1039 };
1040 
1041 class la_i_random_mr_t : public OpcodeBase<la_i_random_mr_t> {
1042 public:
1043   MYFLT *i_mr_lhs;
1044   MYFLT *i_fraction;
1045   la_i_mr_create_t *lhs;
init(CSOUND * csound)1046   int init(CSOUND *csound) {
1047     toa(i_mr_lhs, lhs);
1048     gmm::fill_random(lhs->mr, *i_fraction);
1049     return OK;
1050   }
1051 };
1052 
1053 class la_k_random_mr_t : public OpcodeBase<la_k_random_mr_t> {
1054 public:
1055   MYFLT *i_mr_lhs;
1056   MYFLT *i_fraction;
1057   la_i_mr_create_t *lhs;
init(CSOUND * csound)1058   int init(CSOUND *csound) {
1059     toa(i_mr_lhs, lhs);
1060     return OK;
1061   }
kontrol(CSOUND * csound)1062   int kontrol(CSOUND *csound) {
1063     gmm::fill_random(lhs->mr, *i_fraction);
1064     return OK;
1065   }
1066 };
1067 
1068 class la_i_random_mc_t : public OpcodeBase<la_i_random_mc_t> {
1069 public:
1070   MYFLT *i_mc_lhs;
1071   MYFLT *i_fraction;
1072   la_i_mc_create_t *lhs;
init(CSOUND * csound)1073   int init(CSOUND *csound) {
1074     toa(i_mc_lhs, lhs);
1075     gmm::fill_random(lhs->mc, *i_fraction);
1076     return OK;
1077   }
1078 };
1079 
1080 class la_k_random_mc_t : public OpcodeBase<la_k_random_mc_t> {
1081 public:
1082   MYFLT *i_mc_lhs;
1083   MYFLT *i_fraction;
1084   la_i_mc_create_t *lhs;
init(CSOUND * csound)1085   int init(CSOUND *csound) {
1086     toa(i_mc_lhs, lhs);
1087     return OK;
1088   }
kontrol(CSOUND * csound)1089   int kontrol(CSOUND *csound) {
1090     gmm::fill_random(lhs->mc, *i_fraction);
1091     return OK;
1092   }
1093 };
1094 
1095 class la_i_vr_set_t : public OpcodeBase<la_i_vr_set_t> {
1096 public:
1097   MYFLT *i_vr;
1098   MYFLT *i_row;
1099   MYFLT *i_value;
1100   la_i_vr_create_t *vr;
init(CSOUND *)1101   int init(CSOUND *) {
1102     toa(i_vr, vr);
1103     vr->vr[size_t(*i_row)] = *i_value;
1104     return OK;
1105   }
1106 };
1107 
1108 class la_k_vr_set_t : public OpcodeBase<la_k_vr_set_t> {
1109 public:
1110   MYFLT *i_vr;
1111   MYFLT *k_row;
1112   MYFLT *k_value;
1113   la_i_vr_create_t *vr;
init(CSOUND *)1114   int init(CSOUND *) {
1115     toa(i_vr, vr);
1116     return OK;
1117   }
kontrol(CSOUND *)1118   int kontrol(CSOUND *) {
1119     vr->vr[size_t(*k_row)] = *k_value;
1120     return OK;
1121   }
1122 };
1123 
1124 class la_i_vc_set_t : public OpcodeBase<la_i_vc_set_t> {
1125 public:
1126   MYFLT *i_vc;
1127   MYFLT *i_row;
1128   MYFLT *i_value_r;
1129   MYFLT *i_value_i;
1130   la_i_vc_create_t *vc;
init(CSOUND *)1131   int init(CSOUND *) {
1132     toa(i_vc, vc);
1133     vc->vc[size_t(*i_row)] = std::complex<MYFLT>(*i_value_r, *i_value_i);
1134     return OK;
1135   }
1136 };
1137 
1138 class la_k_vc_set_t : public OpcodeBase<la_k_vc_set_t> {
1139 public:
1140   MYFLT *i_vc;
1141   MYFLT *k_row;
1142   MYFLT *k_value_r;
1143   MYFLT *k_value_i;
1144   la_i_vc_create_t *vc;
init(CSOUND *)1145   int init(CSOUND *) {
1146     toa(i_vc, vc);
1147     return OK;
1148   }
kontrol(CSOUND *)1149   int kontrol(CSOUND *) {
1150     vc->vc[size_t(*k_row)] = std::complex<MYFLT>(*k_value_r, *k_value_i);
1151     return OK;
1152   }
1153 };
1154 
1155 class la_i_mr_set_t : public OpcodeBase<la_i_mr_set_t> {
1156 public:
1157   MYFLT *i_mr;
1158   MYFLT *i_row;
1159   MYFLT *i_column;
1160   MYFLT *i_value;
1161   la_i_mr_create_t *mr;
init(CSOUND *)1162   int init(CSOUND *) {
1163     toa(i_mr, mr);
1164     mr->mr(size_t(*i_row), size_t(*i_column)) = *i_value;
1165     return OK;
1166   }
1167 };
1168 
1169 class la_k_mr_set_t : public OpcodeBase<la_k_mr_set_t> {
1170 public:
1171   MYFLT *i_mr;
1172   MYFLT *k_row;
1173   MYFLT *k_column;
1174   MYFLT *k_value;
1175   la_i_mr_create_t *mr;
init(CSOUND *)1176   int init(CSOUND *) {
1177     toa(i_mr, mr);
1178     return OK;
1179   }
kontrol(CSOUND *)1180   int kontrol(CSOUND *) {
1181     mr->mr(size_t(*k_row), size_t(*k_column)) = *k_value;
1182     return OK;
1183   }
1184 };
1185 
1186 class la_i_mc_set_t : public OpcodeBase<la_i_mc_set_t> {
1187 public:
1188   MYFLT *i_mc;
1189   MYFLT *i_row;
1190   MYFLT *i_column;
1191   MYFLT *i_value_r;
1192   MYFLT *i_value_i;
1193   la_i_mc_create_t *mc;
init(CSOUND *)1194   int init(CSOUND *) {
1195     toa(i_mc, mc);
1196     mc->mc(size_t(*i_row), size_t(*i_column)) =
1197         std::complex<MYFLT>(*i_value_r, *i_value_i);
1198     return OK;
1199   }
1200 };
1201 
1202 class la_k_mc_set_t : public OpcodeBase<la_k_mc_set_t> {
1203 public:
1204   MYFLT *i_mc;
1205   MYFLT *k_row;
1206   MYFLT *k_column;
1207   MYFLT *k_value_r;
1208   MYFLT *k_value_i;
1209   la_i_mc_create_t *mc;
init(CSOUND *)1210   int init(CSOUND *) {
1211     toa(i_mc, mc);
1212     return OK;
1213   }
kontrol(CSOUND *)1214   int kontrol(CSOUND *) {
1215     mc->mc(size_t(*k_row), size_t(*k_column)) =
1216         std::complex<MYFLT>(*k_value_r, *k_value_i);
1217     return OK;
1218   }
1219 };
1220 
1221 class la_i_get_vr_t : public OpcodeBase<la_i_get_vr_t> {
1222 public:
1223   MYFLT *i_value;
1224   MYFLT *i_vr;
1225   MYFLT *i_row;
1226   la_i_vr_create_t *vr;
init(CSOUND *)1227   int init(CSOUND *) {
1228     toa(i_vr, vr);
1229     *i_value = vr->vr[size_t(*i_row)];
1230     return OK;
1231   }
1232 };
1233 
1234 class la_k_get_vr_t : public OpcodeBase<la_k_get_vr_t> {
1235 public:
1236   MYFLT *k_value;
1237   MYFLT *i_vr;
1238   MYFLT *k_row;
1239   la_i_vr_create_t *vr;
init(CSOUND *)1240   int init(CSOUND *) {
1241     toa(i_vr, vr);
1242     return OK;
1243   }
kontrol(CSOUND *)1244   int kontrol(CSOUND *) {
1245     *k_value = vr->vr[size_t(*k_row)];
1246     return OK;
1247   }
1248 };
1249 
1250 class la_i_get_vc_t : public OpcodeBase<la_i_get_vc_t> {
1251 public:
1252   MYFLT *i_value_r;
1253   MYFLT *i_value_i;
1254   MYFLT *i_vc;
1255   MYFLT *i_row;
1256   la_i_vc_create_t *vc;
init(CSOUND *)1257   int init(CSOUND *) {
1258     toa(i_vc, vc);
1259     const std::complex<MYFLT> &lhs = vc->vc[size_t(*i_row)];
1260     *i_value_r = lhs.real();
1261     *i_value_i = lhs.imag();
1262     return OK;
1263   }
1264 };
1265 
1266 class la_k_get_vc_t : public OpcodeBase<la_k_get_vc_t> {
1267 public:
1268   MYFLT *k_value_r;
1269   MYFLT *k_value_i;
1270   MYFLT *i_vc;
1271   MYFLT *k_row;
1272   la_i_vc_create_t *vc;
init(CSOUND *)1273   int init(CSOUND *) {
1274     toa(i_vc, vc);
1275     return OK;
1276   }
kontrol(CSOUND *)1277   int kontrol(CSOUND *) {
1278     const std::complex<MYFLT> &lhs = vc->vc[size_t(*k_row)];
1279     *k_value_r = lhs.real();
1280     *k_value_i = lhs.imag();
1281     return OK;
1282   }
1283 };
1284 
1285 class la_i_get_mr_t : public OpcodeBase<la_i_get_mr_t> {
1286 public:
1287   MYFLT *i_value;
1288   MYFLT *i_mr;
1289   MYFLT *i_row;
1290   MYFLT *i_column;
1291   la_i_mr_create_t *mr;
init(CSOUND *)1292   int init(CSOUND *) {
1293     toa(i_mr, mr);
1294     *i_value = mr->mr(size_t(*i_row), size_t(*i_column));
1295     return OK;
1296   }
1297 };
1298 
1299 class la_k_get_mr_t : public OpcodeBase<la_k_get_mr_t> {
1300 public:
1301   MYFLT *k_value;
1302   MYFLT *i_mr;
1303   MYFLT *k_row;
1304   MYFLT *k_column;
1305   la_i_mr_create_t *mr;
init(CSOUND *)1306   int init(CSOUND *) {
1307     toa(i_mr, mr);
1308     return OK;
1309   }
kontrol(CSOUND *)1310   int kontrol(CSOUND *) {
1311     *k_value = mr->mr(size_t(*k_row), size_t(*k_column));
1312     return OK;
1313   }
1314 };
1315 
1316 class la_i_get_mc_t : public OpcodeBase<la_i_get_mc_t> {
1317 public:
1318   MYFLT *i_value_r;
1319   MYFLT *i_value_i;
1320   MYFLT *i_mc;
1321   MYFLT *i_row;
1322   MYFLT *i_column;
1323   la_i_mc_create_t *mc;
init(CSOUND *)1324   int init(CSOUND *) {
1325     toa(i_mc, mc);
1326     const std::complex<MYFLT> &lhs = mc->mc(size_t(*i_row), size_t(*i_column));
1327     *i_value_r = lhs.real();
1328     *i_value_i = lhs.imag();
1329     return OK;
1330   }
1331 };
1332 
1333 class la_k_get_mc_t : public OpcodeBase<la_k_get_mc_t> {
1334 public:
1335   MYFLT *k_value_r;
1336   MYFLT *k_value_i;
1337   MYFLT *i_mc;
1338   MYFLT *k_row;
1339   MYFLT *k_column;
1340   la_i_mc_create_t *mc;
init(CSOUND *)1341   int init(CSOUND *) {
1342     toa(i_mc, mc);
1343     return OK;
1344   }
kontrol(CSOUND *)1345   int kontrol(CSOUND *) {
1346     const std::complex<MYFLT> &lhs = mc->mc(size_t(*k_row), size_t(*k_column));
1347     *k_value_r = lhs.real();
1348     *k_value_i = lhs.imag();
1349     return OK;
1350   }
1351 };
1352 
1353 class la_i_transpose_mr_t : public OpcodeBase<la_i_transpose_mr_t> {
1354 public:
1355   MYFLT *imr_lhs;
1356   MYFLT *imr_rhs;
1357   la_i_mr_create_t *lhs;
1358   la_i_mr_create_t *rhs;
init(CSOUND *)1359   int init(CSOUND *) {
1360     toa(imr_lhs, lhs);
1361     toa(imr_rhs, rhs);
1362     gmm::copy(gmm::transposed(rhs->mr), lhs->mr);
1363     return OK;
1364   }
1365 };
1366 
1367 class la_k_transpose_mr_t : public OpcodeBase<la_k_transpose_mr_t> {
1368 public:
1369   MYFLT *imr_lhs;
1370   MYFLT *imr_rhs;
1371   la_i_mr_create_t *lhs;
1372   la_i_mr_create_t *rhs;
init(CSOUND *)1373   int init(CSOUND *) {
1374     toa(imr_lhs, lhs);
1375     toa(imr_rhs, rhs);
1376     return OK;
1377   }
kontrol(CSOUND *)1378   int kontrol(CSOUND *) {
1379     gmm::copy(gmm::transposed(rhs->mr), lhs->mr);
1380     return OK;
1381   }
1382 };
1383 
1384 class la_i_transpose_mc_t : public OpcodeBase<la_i_transpose_mc_t> {
1385 public:
1386   MYFLT *imc_lhs;
1387   MYFLT *imc_rhs;
1388   la_i_mc_create_t *lhs;
1389   la_i_mc_create_t *rhs;
init(CSOUND *)1390   int init(CSOUND *) {
1391     toa(imc_lhs, lhs);
1392     toa(imc_rhs, rhs);
1393     gmm::copy(gmm::transposed(rhs->mc), lhs->mc);
1394     return OK;
1395   }
1396 };
1397 
1398 class la_k_transpose_mc_t : public OpcodeBase<la_k_transpose_mc_t> {
1399 public:
1400   MYFLT *imc_lhs;
1401   MYFLT *imc_rhs;
1402   la_i_mc_create_t *lhs;
1403   la_i_mc_create_t *rhs;
init(CSOUND *)1404   int init(CSOUND *) {
1405     toa(imc_lhs, lhs);
1406     toa(imc_rhs, rhs);
1407     return OK;
1408   }
kontrol(CSOUND *)1409   int kontrol(CSOUND *) {
1410     gmm::copy(gmm::transposed(rhs->mc), lhs->mc);
1411     return OK;
1412   }
1413 };
1414 
1415 class la_i_conjugate_vr_t : public OpcodeBase<la_i_conjugate_vr_t> {
1416 public:
1417   MYFLT *ivr_lhs;
1418   MYFLT *ivr_rhs;
1419   la_i_vr_create_t *lhs;
1420   la_i_vr_create_t *rhs;
init(CSOUND *)1421   int init(CSOUND *) {
1422     toa(ivr_lhs, lhs);
1423     toa(ivr_rhs, rhs);
1424     gmm::copy(gmm::conjugated(rhs->vr), lhs->vr);
1425     return OK;
1426   }
1427 };
1428 
1429 class la_k_conjugate_vr_t : public OpcodeBase<la_k_conjugate_vr_t> {
1430 public:
1431   MYFLT *ivr_lhs;
1432   MYFLT *ivr_rhs;
1433   la_i_vr_create_t *lhs;
1434   la_i_vr_create_t *rhs;
init(CSOUND *)1435   int init(CSOUND *) {
1436     toa(ivr_lhs, lhs);
1437     toa(ivr_rhs, rhs);
1438     return OK;
1439   }
kontrol(CSOUND *)1440   int kontrol(CSOUND *) {
1441     gmm::copy(gmm::conjugated(rhs->vr), lhs->vr);
1442     return OK;
1443   }
1444 };
1445 
1446 class la_i_conjugate_vc_t : public OpcodeBase<la_i_conjugate_vc_t> {
1447 public:
1448   MYFLT *ivc_lhs;
1449   MYFLT *ivc_rhs;
1450   la_i_vc_create_t *lhs;
1451   la_i_vc_create_t *rhs;
init(CSOUND *)1452   int init(CSOUND *) {
1453     toa(ivc_lhs, lhs);
1454     toa(ivc_rhs, rhs);
1455     gmm::copy(gmm::conjugated(rhs->vc), lhs->vc);
1456     return OK;
1457   }
1458 };
1459 
1460 class la_k_conjugate_vc_t : public OpcodeBase<la_k_conjugate_vc_t> {
1461 public:
1462   MYFLT *ivc_lhs;
1463   MYFLT *ivc_rhs;
1464   la_i_vc_create_t *lhs;
1465   la_i_vc_create_t *rhs;
init(CSOUND *)1466   int init(CSOUND *) {
1467     toa(ivc_lhs, lhs);
1468     toa(ivc_rhs, rhs);
1469     return OK;
1470   }
kontrol(CSOUND *)1471   int kontrol(CSOUND *) {
1472     gmm::copy(gmm::conjugated(rhs->vc), lhs->vc);
1473     return OK;
1474   }
1475 };
1476 
1477 class la_i_conjugate_mr_t : public OpcodeBase<la_i_conjugate_mr_t> {
1478 public:
1479   MYFLT *imr_lhs;
1480   MYFLT *imr_rhs;
1481   la_i_mr_create_t *lhs;
1482   la_i_mr_create_t *rhs;
init(CSOUND *)1483   int init(CSOUND *) {
1484     toa(imr_lhs, lhs);
1485     toa(imr_rhs, rhs);
1486     gmm::copy(gmm::conjugated(rhs->mr), lhs->mr);
1487     return OK;
1488   }
1489 };
1490 
1491 class la_k_conjugate_mr_t : public OpcodeBase<la_k_conjugate_mr_t> {
1492 public:
1493   MYFLT *imr_lhs;
1494   MYFLT *imr_rhs;
1495   la_i_mr_create_t *lhs;
1496   la_i_mr_create_t *rhs;
init(CSOUND *)1497   int init(CSOUND *) {
1498     toa(imr_lhs, lhs);
1499     toa(imr_rhs, rhs);
1500     return OK;
1501   }
kontrol(CSOUND *)1502   int kontrol(CSOUND *) {
1503     gmm::copy(gmm::conjugated(rhs->mr), lhs->mr);
1504     return OK;
1505   }
1506 };
1507 
1508 class la_i_conjugate_mc_t : public OpcodeBase<la_i_conjugate_mc_t> {
1509 public:
1510   MYFLT *imc_lhs;
1511   MYFLT *imc_rhs;
1512   la_i_mc_create_t *lhs;
1513   la_i_mc_create_t *rhs;
init(CSOUND *)1514   int init(CSOUND *) {
1515     toa(imc_lhs, lhs);
1516     toa(imc_rhs, rhs);
1517     gmm::copy(gmm::conjugated(rhs->mc), lhs->mc);
1518     return OK;
1519   }
1520 };
1521 
1522 class la_k_conjugate_mc_t : public OpcodeBase<la_k_conjugate_mc_t> {
1523 public:
1524   MYFLT *imc_lhs;
1525   MYFLT *imc_rhs;
1526   la_i_mc_create_t *lhs;
1527   la_i_mc_create_t *rhs;
init(CSOUND *)1528   int init(CSOUND *) {
1529     toa(imc_lhs, lhs);
1530     toa(imc_rhs, rhs);
1531     return OK;
1532   }
kontrol(CSOUND *)1533   int kontrol(CSOUND *) {
1534     gmm::copy(gmm::conjugated(rhs->mc), lhs->mc);
1535     return OK;
1536   }
1537 };
1538 
1539 class la_i_norm1_vr_t : public OpcodeBase<la_i_norm1_vr_t> {
1540 public:
1541   MYFLT *lhs;
1542   MYFLT *rhs_;
1543   la_i_vr_create_t *rhs;
init(CSOUND *)1544   int init(CSOUND *) {
1545     toa(rhs_, rhs);
1546     *lhs = gmm::vect_norm1(rhs->vr);
1547     return OK;
1548   }
1549 };
1550 
1551 class la_k_norm1_vr_t : public OpcodeBase<la_k_norm1_vr_t> {
1552 public:
1553   MYFLT *lhs;
1554   MYFLT *rhs_;
1555   la_i_vr_create_t *rhs;
init(CSOUND *)1556   int init(CSOUND *) {
1557     toa(rhs_, rhs);
1558     return OK;
1559   }
kontrol(CSOUND *)1560   int kontrol(CSOUND *) {
1561     toa(rhs_, rhs);
1562     *lhs = gmm::vect_norm1(rhs->vr);
1563     return OK;
1564   }
1565 };
1566 
1567 class la_i_norm1_vc_t : public OpcodeBase<la_i_norm1_vc_t> {
1568 public:
1569   MYFLT *lhs;
1570   MYFLT *rhs_;
1571   la_i_vc_create_t *rhs;
init(CSOUND *)1572   int init(CSOUND *) {
1573     toa(rhs_, rhs);
1574     *lhs = gmm::vect_norm1(rhs->vc);
1575     return OK;
1576   }
1577 };
1578 
1579 class la_k_norm1_vc_t : public OpcodeBase<la_k_norm1_vc_t> {
1580 public:
1581   MYFLT *lhs;
1582   MYFLT *rhs_;
1583   la_i_vc_create_t *rhs;
init(CSOUND *)1584   int init(CSOUND *) {
1585     toa(rhs_, rhs);
1586     return OK;
1587   }
kontrol(CSOUND *)1588   int kontrol(CSOUND *) {
1589     toa(rhs_, rhs);
1590     *lhs = gmm::vect_norm1(rhs->vc);
1591     return OK;
1592   }
1593 };
1594 
1595 class la_i_norm1_mr_t : public OpcodeBase<la_i_norm1_mr_t> {
1596 public:
1597   MYFLT *lhs;
1598   MYFLT *rhs_;
1599   la_i_mr_create_t *rhs;
init(CSOUND *)1600   int init(CSOUND *) {
1601     toa(rhs_, rhs);
1602     *lhs = gmm::mat_norm1(rhs->mr);
1603     return OK;
1604   }
1605 };
1606 
1607 class la_k_norm1_mr_t : public OpcodeBase<la_k_norm1_mr_t> {
1608 public:
1609   MYFLT *lhs;
1610   MYFLT *rhs_;
1611   la_i_mr_create_t *rhs;
init(CSOUND *)1612   int init(CSOUND *) {
1613     toa(rhs_, rhs);
1614     return OK;
1615   }
kontrol(CSOUND *)1616   int kontrol(CSOUND *) {
1617     toa(rhs_, rhs);
1618     *lhs = gmm::mat_norm1(rhs->mr);
1619     return OK;
1620   }
1621 };
1622 
1623 class la_i_norm1_mc_t : public OpcodeBase<la_i_norm1_mc_t> {
1624 public:
1625   MYFLT *lhs;
1626   MYFLT *rhs_;
1627   la_i_mc_create_t *rhs;
init(CSOUND *)1628   int init(CSOUND *) {
1629     toa(rhs_, rhs);
1630     *lhs = gmm::mat_norm1(rhs->mc);
1631     return OK;
1632   }
1633 };
1634 
1635 class la_k_norm1_mc_t : public OpcodeBase<la_k_norm1_mc_t> {
1636 public:
1637   MYFLT *lhs;
1638   MYFLT *rhs_;
1639   la_i_mc_create_t *rhs;
init(CSOUND *)1640   int init(CSOUND *) {
1641     toa(rhs_, rhs);
1642     return OK;
1643   }
kontrol(CSOUND *)1644   int kontrol(CSOUND *) {
1645     toa(rhs_, rhs);
1646     *lhs = gmm::mat_norm1(rhs->mc);
1647     return OK;
1648   }
1649 };
1650 
1651 class la_i_norm_euclid_vr_t : public OpcodeBase<la_i_norm_euclid_vr_t> {
1652 public:
1653   MYFLT *lhs;
1654   MYFLT *rhs_;
1655   la_i_vr_create_t *rhs;
init(CSOUND *)1656   int init(CSOUND *) {
1657     toa(rhs_, rhs);
1658     *lhs = gmm::vect_norm2(rhs->vr);
1659     return OK;
1660   }
1661 };
1662 
1663 class la_k_norm_euclid_vr_t : public OpcodeBase<la_k_norm_euclid_vr_t> {
1664 public:
1665   MYFLT *lhs;
1666   MYFLT *rhs_;
1667   la_i_vr_create_t *rhs;
init(CSOUND *)1668   int init(CSOUND *) {
1669     toa(rhs_, rhs);
1670     return OK;
1671   }
kontrol(CSOUND *)1672   int kontrol(CSOUND *) {
1673     toa(rhs_, rhs);
1674     *lhs = gmm::vect_norm2(rhs->vr);
1675     return OK;
1676   }
1677 };
1678 
1679 class la_i_norm_euclid_vc_t : public OpcodeBase<la_i_norm_euclid_vc_t> {
1680 public:
1681   MYFLT *lhs;
1682   MYFLT *rhs_;
1683   la_i_vc_create_t *rhs;
init(CSOUND *)1684   int init(CSOUND *) {
1685     toa(rhs_, rhs);
1686     *lhs = gmm::vect_norm2(rhs->vc);
1687     return OK;
1688   }
1689 };
1690 
1691 class la_k_norm_euclid_vc_t : public OpcodeBase<la_k_norm_euclid_vc_t> {
1692 public:
1693   MYFLT *lhs;
1694   MYFLT *rhs_;
1695   la_i_vc_create_t *rhs;
init(CSOUND *)1696   int init(CSOUND *) {
1697     toa(rhs_, rhs);
1698     return OK;
1699   }
kontrol(CSOUND *)1700   int kontrol(CSOUND *) {
1701     toa(rhs_, rhs);
1702     *lhs = gmm::vect_norm2(rhs->vc);
1703     return OK;
1704   }
1705 };
1706 
1707 class la_i_norm_euclid_mr_t : public OpcodeBase<la_i_norm_euclid_mr_t> {
1708 public:
1709   MYFLT *lhs;
1710   MYFLT *rhs_;
1711   la_i_mr_create_t *rhs;
init(CSOUND *)1712   int init(CSOUND *) {
1713     toa(rhs_, rhs);
1714     *lhs = gmm::mat_euclidean_norm(rhs->mr);
1715     return OK;
1716   }
1717 };
1718 
1719 class la_k_norm_euclid_mr_t : public OpcodeBase<la_k_norm_euclid_mr_t> {
1720 public:
1721   MYFLT *lhs;
1722   MYFLT *rhs_;
1723   la_i_mr_create_t *rhs;
init(CSOUND *)1724   int init(CSOUND *) {
1725     toa(rhs_, rhs);
1726     return OK;
1727   }
kontrol(CSOUND *)1728   int kontrol(CSOUND *) {
1729     toa(rhs_, rhs);
1730     *lhs = gmm::mat_euclidean_norm(rhs->mr);
1731     return OK;
1732   }
1733 };
1734 
1735 class la_i_norm_euclid_mc_t : public OpcodeBase<la_i_norm_euclid_mc_t> {
1736 public:
1737   MYFLT *lhs;
1738   MYFLT *rhs_;
1739   la_i_mc_create_t *rhs;
init(CSOUND *)1740   int init(CSOUND *) {
1741     toa(rhs_, rhs);
1742     *lhs = gmm::mat_euclidean_norm(rhs->mc);
1743     return OK;
1744   }
1745 };
1746 
1747 class la_k_norm_euclid_mc_t : public OpcodeBase<la_k_norm_euclid_mc_t> {
1748 public:
1749   MYFLT *lhs;
1750   MYFLT *rhs_;
1751   la_i_mc_create_t *rhs;
init(CSOUND *)1752   int init(CSOUND *) {
1753     toa(rhs_, rhs);
1754     return OK;
1755   }
kontrol(CSOUND *)1756   int kontrol(CSOUND *) {
1757     toa(rhs_, rhs);
1758     *lhs = gmm::mat_euclidean_norm(rhs->mc);
1759     return OK;
1760   }
1761 };
1762 
1763 class la_i_distance_vr_t : public OpcodeBase<la_i_distance_vr_t> {
1764 public:
1765   MYFLT *lhs;
1766   MYFLT *rhs_1_;
1767   MYFLT *rhs_2_;
1768   la_i_vr_create_t *rhs_1;
1769   la_i_vr_create_t *rhs_2;
init(CSOUND *)1770   int init(CSOUND *) {
1771     toa(rhs_1_, rhs_1);
1772     toa(rhs_2_, rhs_2);
1773     *lhs = gmm::vect_dist2(rhs_1->vr, rhs_2->vr);
1774     return OK;
1775   }
1776 };
1777 
1778 class la_k_distance_vr_t : public OpcodeBase<la_k_distance_vr_t> {
1779 public:
1780   MYFLT *lhs;
1781   MYFLT *rhs_1_;
1782   MYFLT *rhs_2_;
1783   la_i_vr_create_t *rhs_1;
1784   la_i_vr_create_t *rhs_2;
init(CSOUND *)1785   int init(CSOUND *) {
1786     toa(rhs_1_, rhs_1);
1787     toa(rhs_2_, rhs_2);
1788     return OK;
1789   }
kontrol(CSOUND *)1790   int kontrol(CSOUND *) {
1791     *lhs = gmm::vect_dist2(rhs_1->vr, rhs_2->vr);
1792     return OK;
1793   }
1794 };
1795 
1796 class la_i_distance_vc_t : public OpcodeBase<la_i_distance_vc_t> {
1797 public:
1798   MYFLT *lhs;
1799   MYFLT *rhs_1_;
1800   MYFLT *rhs_2_;
1801   la_i_vc_create_t *rhs_1;
1802   la_i_vc_create_t *rhs_2;
init(CSOUND *)1803   int init(CSOUND *) {
1804     toa(rhs_1_, rhs_1);
1805     toa(rhs_2_, rhs_2);
1806     *lhs = gmm::vect_dist2(rhs_1->vc, rhs_2->vc);
1807     return OK;
1808   }
1809 };
1810 
1811 class la_k_distance_vc_t : public OpcodeBase<la_k_distance_vc_t> {
1812 public:
1813   MYFLT *lhs;
1814   MYFLT *rhs_1_;
1815   MYFLT *rhs_2_;
1816   la_i_vc_create_t *rhs_1;
1817   la_i_vc_create_t *rhs_2;
init(CSOUND *)1818   int init(CSOUND *) {
1819     toa(rhs_1_, rhs_1);
1820     toa(rhs_2_, rhs_2);
1821     return OK;
1822   }
kontrol(CSOUND *)1823   int kontrol(CSOUND *) {
1824     *lhs = gmm::vect_dist2(rhs_1->vc, rhs_2->vc);
1825     return OK;
1826   }
1827 };
1828 
1829 class la_i_norm_max_mr_t : public OpcodeBase<la_i_norm_max_mr_t> {
1830 public:
1831   MYFLT *lhs;
1832   MYFLT *rhs_;
1833   la_i_mr_create_t *rhs;
init(CSOUND *)1834   int init(CSOUND *) {
1835     toa(rhs_, rhs);
1836     *lhs = gmm::mat_maxnorm(rhs->mr);
1837     return OK;
1838   }
1839 };
1840 
1841 class la_k_norm_max_mr_t : public OpcodeBase<la_k_norm_max_mr_t> {
1842 public:
1843   MYFLT *lhs;
1844   MYFLT *rhs_;
1845   la_i_mr_create_t *rhs;
init(CSOUND *)1846   int init(CSOUND *) {
1847     toa(rhs_, rhs);
1848     return OK;
1849   }
kontrol(CSOUND *)1850   int kontrol(CSOUND *) {
1851     toa(rhs_, rhs);
1852     *lhs = gmm::mat_maxnorm(rhs->mr);
1853     return OK;
1854   }
1855 };
1856 
1857 class la_i_norm_max_mc_t : public OpcodeBase<la_i_norm_max_mc_t> {
1858 public:
1859   MYFLT *lhs;
1860   MYFLT *rhs_;
1861   la_i_mc_create_t *rhs;
init(CSOUND *)1862   int init(CSOUND *) {
1863     toa(rhs_, rhs);
1864     *lhs = gmm::mat_maxnorm(rhs->mc);
1865     return OK;
1866   }
1867 };
1868 
1869 class la_k_norm_max_mc_t : public OpcodeBase<la_k_norm_max_mc_t> {
1870 public:
1871   MYFLT *lhs;
1872   MYFLT *rhs_;
1873   la_i_mc_create_t *rhs;
init(CSOUND *)1874   int init(CSOUND *) {
1875     toa(rhs_, rhs);
1876     return OK;
1877   }
kontrol(CSOUND *)1878   int kontrol(CSOUND *) {
1879     toa(rhs_, rhs);
1880     *lhs = gmm::mat_maxnorm(rhs->mc);
1881     return OK;
1882   }
1883 };
1884 
1885 class la_i_norm_inf_vr_t : public OpcodeBase<la_i_norm_inf_vr_t> {
1886 public:
1887   MYFLT *lhs;
1888   MYFLT *rhs_;
1889   la_i_vr_create_t *rhs;
init(CSOUND *)1890   int init(CSOUND *) {
1891     toa(rhs_, rhs);
1892     *lhs = gmm::vect_norminf(rhs->vr);
1893     return OK;
1894   }
1895 };
1896 
1897 class la_k_norm_inf_vr_t : public OpcodeBase<la_k_norm_inf_vr_t> {
1898 public:
1899   MYFLT *lhs;
1900   MYFLT *rhs_;
1901   la_i_vr_create_t *rhs;
init(CSOUND *)1902   int init(CSOUND *) {
1903     toa(rhs_, rhs);
1904     return OK;
1905   }
kontrol(CSOUND *)1906   int kontrol(CSOUND *) {
1907     toa(rhs_, rhs);
1908     *lhs = gmm::vect_norminf(rhs->vr);
1909     return OK;
1910   }
1911 };
1912 
1913 class la_i_norm_inf_vc_t : public OpcodeBase<la_i_norm_inf_vc_t> {
1914 public:
1915   MYFLT *lhs;
1916   MYFLT *rhs_;
1917   la_i_vc_create_t *rhs;
init(CSOUND *)1918   int init(CSOUND *) {
1919     toa(rhs_, rhs);
1920     *lhs = gmm::vect_norminf(rhs->vc);
1921     return OK;
1922   }
1923 };
1924 
1925 class la_k_norm_inf_vc_t : public OpcodeBase<la_k_norm_inf_vc_t> {
1926 public:
1927   MYFLT *lhs;
1928   MYFLT *rhs_;
1929   la_i_vc_create_t *rhs;
init(CSOUND *)1930   int init(CSOUND *) {
1931     toa(rhs_, rhs);
1932     return OK;
1933   }
kontrol(CSOUND *)1934   int kontrol(CSOUND *) {
1935     toa(rhs_, rhs);
1936     *lhs = gmm::vect_norminf(rhs->vc);
1937     return OK;
1938   }
1939 };
1940 
1941 class la_i_norm_inf_mr_t : public OpcodeBase<la_i_norm_inf_mr_t> {
1942 public:
1943   MYFLT *lhs;
1944   MYFLT *rhs_;
1945   la_i_mr_create_t *rhs;
init(CSOUND *)1946   int init(CSOUND *) {
1947     toa(rhs_, rhs);
1948     *lhs = gmm::mat_norminf(rhs->mr);
1949     return OK;
1950   }
1951 };
1952 
1953 class la_k_norm_inf_mr_t : public OpcodeBase<la_k_norm_inf_mr_t> {
1954 public:
1955   MYFLT *lhs;
1956   MYFLT *rhs_;
1957   la_i_mr_create_t *rhs;
init(CSOUND *)1958   int init(CSOUND *) {
1959     toa(rhs_, rhs);
1960     return OK;
1961   }
kontrol(CSOUND *)1962   int kontrol(CSOUND *) {
1963     toa(rhs_, rhs);
1964     *lhs = gmm::mat_norminf(rhs->mr);
1965     return OK;
1966   }
1967 };
1968 
1969 class la_i_norm_inf_mc_t : public OpcodeBase<la_i_norm_inf_mc_t> {
1970 public:
1971   MYFLT *lhs;
1972   MYFLT *rhs_;
1973   la_i_mc_create_t *rhs;
init(CSOUND *)1974   int init(CSOUND *) {
1975     toa(rhs_, rhs);
1976     *lhs = gmm::mat_norminf(rhs->mc);
1977     return OK;
1978   }
1979 };
1980 
1981 class la_k_norm_inf_mc_t : public OpcodeBase<la_k_norm_inf_mc_t> {
1982 public:
1983   MYFLT *lhs;
1984   MYFLT *rhs_;
1985   la_i_mc_create_t *rhs;
init(CSOUND *)1986   int init(CSOUND *) {
1987     toa(rhs_, rhs);
1988     return OK;
1989   }
kontrol(CSOUND *)1990   int kontrol(CSOUND *) {
1991     toa(rhs_, rhs);
1992     *lhs = gmm::mat_norminf(rhs->mc);
1993     return OK;
1994   }
1995 };
1996 
1997 class la_i_trace_mr_t : public OpcodeBase<la_i_trace_mr_t> {
1998 public:
1999   MYFLT *lhs;
2000   MYFLT *rhs_;
2001   la_i_mr_create_t *rhs;
init(CSOUND *)2002   int init(CSOUND *) {
2003     toa(rhs_, rhs);
2004     *lhs = gmm::mat_trace(rhs->mr);
2005     return OK;
2006   }
2007 };
2008 
2009 class la_k_trace_mr_t : public OpcodeBase<la_k_trace_mr_t> {
2010 public:
2011   MYFLT *lhs;
2012   MYFLT *rhs_;
2013   la_i_mr_create_t *rhs;
init(CSOUND *)2014   int init(CSOUND *) {
2015     toa(rhs_, rhs);
2016     return OK;
2017   }
kontrol(CSOUND *)2018   int kontrol(CSOUND *) {
2019     toa(rhs_, rhs);
2020     *lhs = gmm::mat_trace(rhs->mr);
2021     return OK;
2022   }
2023 };
2024 
2025 class la_i_trace_mc_t : public OpcodeBase<la_i_trace_mc_t> {
2026 public:
2027   MYFLT *lhs_r;
2028   MYFLT *lhs_i;
2029   MYFLT *rhs_;
2030   la_i_mc_create_t *rhs;
init(CSOUND *)2031   int init(CSOUND *) {
2032     toa(rhs_, rhs);
2033     const std::complex<MYFLT> &lhs = gmm::mat_trace(rhs->mc);
2034     *lhs_r = lhs.real();
2035     *lhs_i = lhs.imag();
2036     return OK;
2037   }
2038 };
2039 
2040 class la_k_trace_mc_t : public OpcodeBase<la_k_trace_mc_t> {
2041 public:
2042   MYFLT *lhs_r;
2043   MYFLT *lhs_i;
2044   MYFLT *rhs_;
2045   la_i_mc_create_t *rhs;
init(CSOUND *)2046   int init(CSOUND *) {
2047     toa(rhs_, rhs);
2048     return OK;
2049   }
kontrol(CSOUND *)2050   int kontrol(CSOUND *) {
2051     toa(rhs_, rhs);
2052     const std::complex<MYFLT> &lhs = gmm::mat_trace(rhs->mc);
2053     *lhs_r = lhs.real();
2054     *lhs_i = lhs.imag();
2055     return OK;
2056   }
2057 };
2058 
2059 class la_i_lu_det_mr_t : public OpcodeBase<la_i_lu_det_mr_t> {
2060 public:
2061   MYFLT *lhs;
2062   MYFLT *rhs_;
2063   la_i_mr_create_t *rhs;
init(CSOUND *)2064   int init(CSOUND *) {
2065     toa(rhs_, rhs);
2066     *lhs = gmm::lu_det(rhs->mr);
2067     return OK;
2068   }
2069 };
2070 
2071 class la_k_lu_det_mr_t : public OpcodeBase<la_k_lu_det_mr_t> {
2072 public:
2073   MYFLT *lhs;
2074   MYFLT *rhs_;
2075   la_i_mr_create_t *rhs;
init(CSOUND *)2076   int init(CSOUND *) {
2077     toa(rhs_, rhs);
2078     return OK;
2079   }
kontrol(CSOUND *)2080   int kontrol(CSOUND *) {
2081     toa(rhs_, rhs);
2082     *lhs = gmm::lu_det(rhs->mr);
2083     return OK;
2084   }
2085 };
2086 
2087 class la_i_lu_det_mc_t : public OpcodeBase<la_i_lu_det_mc_t> {
2088 public:
2089   MYFLT *lhs_r;
2090   MYFLT *lhs_i;
2091   MYFLT *rhs_;
2092   la_i_mc_create_t *rhs;
init(CSOUND *)2093   int init(CSOUND *) {
2094     toa(rhs_, rhs);
2095     const std::complex<MYFLT> &lhs = gmm::lu_det(rhs->mc);
2096     *lhs_r = lhs.real();
2097     *lhs_i = lhs.imag();
2098     return OK;
2099   }
2100 };
2101 
2102 class la_k_lu_det_mc_t : public OpcodeBase<la_k_lu_det_mc_t> {
2103 public:
2104   MYFLT *lhs_r;
2105   MYFLT *lhs_i;
2106   MYFLT *rhs_;
2107   la_i_mc_create_t *rhs;
init(CSOUND *)2108   int init(CSOUND *) {
2109     toa(rhs_, rhs);
2110     return OK;
2111   }
kontrol(CSOUND *)2112   int kontrol(CSOUND *) {
2113     toa(rhs_, rhs);
2114     const std::complex<MYFLT> &lhs = gmm::lu_det(rhs->mc);
2115     *lhs_r = lhs.real();
2116     *lhs_i = lhs.imag();
2117     return OK;
2118   }
2119 };
2120 
2121 /**
2122  * Elementwise addition.
2123  * The array on the left-hand side can also appear
2124  * on the right-hand side in order to perform a += b.
2125  */
2126 class la_i_add_vr_t : public OpcodeBase<la_i_add_vr_t> {
2127 public:
2128   MYFLT *lhs_;
2129   MYFLT *rhs_a_;
2130   MYFLT *rhs_b_;
2131   la_i_vr_create_t *lhs;
2132   la_i_vr_create_t *rhs_a;
2133   la_i_vr_create_t *rhs_b;
init(CSOUND *)2134   int init(CSOUND *) {
2135     toa(lhs_, lhs);
2136     toa(rhs_a_, rhs_a);
2137     toa(rhs_b_, rhs_b);
2138     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2139       lhs->vr[i] = rhs_a->vr[i] + rhs_b->vr[i];
2140     }
2141     return OK;
2142   }
2143 };
2144 
2145 /**
2146  * Elementwise addition.
2147  * The array on the left-hand side can also appear
2148  * on the right-hand side in order to perform a += b.
2149  */
2150 class la_k_add_vr_t : public OpcodeBase<la_k_add_vr_t> {
2151 public:
2152   MYFLT *lhs_;
2153   MYFLT *rhs_a_;
2154   MYFLT *rhs_b_;
2155   la_i_vr_create_t *lhs;
2156   la_i_vr_create_t *rhs_a;
2157   la_i_vr_create_t *rhs_b;
init(CSOUND *)2158   int init(CSOUND *) {
2159     toa(lhs_, lhs);
2160     toa(rhs_a_, rhs_a);
2161     toa(rhs_b_, rhs_b);
2162     return OK;
2163   }
kontrol(CSOUND *)2164   int kontrol(CSOUND *) {
2165     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2166       lhs->vr[i] = rhs_a->vr[i] + rhs_b->vr[i];
2167     }
2168     return OK;
2169   }
2170 };
2171 
2172 /**
2173  * Elementwise addition.
2174  * The array on the left-hand side can also appear
2175  * on the right-hand side in order to perform a += b.
2176  */
2177 class la_i_add_vc_t : public OpcodeBase<la_i_add_vc_t> {
2178 public:
2179   MYFLT *lhs_;
2180   MYFLT *rhs_a_;
2181   MYFLT *rhs_b_;
2182   la_i_vc_create_t *lhs;
2183   la_i_vc_create_t *rhs_a;
2184   la_i_vc_create_t *rhs_b;
init(CSOUND *)2185   int init(CSOUND *) {
2186     toa(lhs_, lhs);
2187     toa(rhs_a_, rhs_a);
2188     toa(rhs_b_, rhs_b);
2189     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2190       lhs->vc[i] = rhs_a->vc[i] + rhs_b->vc[i];
2191     }
2192     return OK;
2193   }
2194 };
2195 
2196 /**
2197  * Elementwise addition.
2198  * The array on the left-hand side can also appear
2199  * on the right-hand side in order to perform a += b.
2200  */
2201 class la_k_add_vc_t : public OpcodeBase<la_k_add_vc_t> {
2202 public:
2203   MYFLT *lhs_;
2204   MYFLT *rhs_a_;
2205   MYFLT *rhs_b_;
2206   la_i_vc_create_t *lhs;
2207   la_i_vc_create_t *rhs_a;
2208   la_i_vc_create_t *rhs_b;
init(CSOUND *)2209   int init(CSOUND *) {
2210     toa(lhs_, lhs);
2211     toa(rhs_a_, rhs_a);
2212     toa(rhs_b_, rhs_b);
2213     return OK;
2214   }
kontrol(CSOUND *)2215   int kontrol(CSOUND *) {
2216     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2217       lhs->vc[i] = rhs_a->vc[i] + rhs_b->vc[i];
2218     }
2219     return OK;
2220   }
2221 };
2222 
2223 /**
2224  * Elementwise addition.
2225  * The array on the left-hand side can also appear
2226  * on the right-hand side in order to perform A += B.
2227  */
2228 class la_i_add_mr_t : public OpcodeBase<la_i_add_mr_t> {
2229 public:
2230   MYFLT *lhs_;
2231   MYFLT *rhs_a_;
2232   MYFLT *rhs_b_;
2233   la_i_mr_create_t *lhs;
2234   la_i_mr_create_t *rhs_a;
2235   la_i_mr_create_t *rhs_b;
init(CSOUND *)2236   int init(CSOUND *) {
2237     toa(lhs_, lhs);
2238     toa(rhs_a_, rhs_a);
2239     toa(rhs_b_, rhs_b);
2240     size_t rowN = gmm::mat_nrows(rhs_a->mr);
2241     size_t columnN = gmm::mat_ncols(rhs_a->mr);
2242     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2243       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2244         lhs->mr(rowI, columnI) =
2245             rhs_a->mr(rowI, columnI) + rhs_b->mr(rowI, columnI);
2246       }
2247     }
2248     return OK;
2249   }
2250 };
2251 
2252 /**
2253  * Elementwise addition.
2254  * The array on the left-hand side can also appear
2255  * on the right-hand side in order to perform A += B.
2256  */
2257 class la_k_add_mr_t : public OpcodeBase<la_k_add_mr_t> {
2258 public:
2259   MYFLT *lhs_;
2260   MYFLT *rhs_a_;
2261   MYFLT *rhs_b_;
2262   la_i_mr_create_t *lhs;
2263   la_i_mr_create_t *rhs_a;
2264   la_i_mr_create_t *rhs_b;
2265   size_t rowN;
2266   size_t columnN;
init(CSOUND *)2267   int init(CSOUND *) {
2268     toa(lhs_, lhs);
2269     toa(rhs_a_, rhs_a);
2270     toa(rhs_b_, rhs_b);
2271     rowN = gmm::mat_nrows(rhs_a->mr);
2272     columnN = gmm::mat_ncols(rhs_a->mr);
2273     return OK;
2274   }
kontrol(CSOUND *)2275   int kontrol(CSOUND *) {
2276     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2277       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2278         lhs->mr(rowI, columnI) =
2279             rhs_a->mr(rowI, columnI) + rhs_b->mr(rowI, columnI);
2280       }
2281     }
2282     return OK;
2283   }
2284 };
2285 
2286 /**
2287  * Elementwise addition.
2288  * The array on the left-hand side can also appear
2289  * on the right-hand side in order to perform A += B.
2290  */
2291 class la_i_add_mc_t : public OpcodeBase<la_i_add_mc_t> {
2292 public:
2293   MYFLT *lhs_;
2294   MYFLT *rhs_a_;
2295   MYFLT *rhs_b_;
2296   la_i_mc_create_t *lhs;
2297   la_i_mc_create_t *rhs_a;
2298   la_i_mc_create_t *rhs_b;
init(CSOUND *)2299   int init(CSOUND *) {
2300     toa(lhs_, lhs);
2301     toa(rhs_a_, rhs_a);
2302     toa(rhs_b_, rhs_b);
2303     size_t rowN = gmm::mat_nrows(rhs_a->mc);
2304     size_t columnN = gmm::mat_ncols(rhs_a->mc);
2305     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2306       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2307         lhs->mc(rowI, columnI) =
2308             rhs_a->mc(rowI, columnI) + rhs_b->mc(rowI, columnI);
2309       }
2310     }
2311     return OK;
2312   }
2313 };
2314 
2315 /**
2316  * Elementwise addition.
2317  * The array on the left-hand side can also appear
2318  * on the right-hand side in order to perform A += B.
2319  */
2320 class la_k_add_mc_t : public OpcodeBase<la_k_add_vc_t> {
2321 public:
2322   MYFLT *lhs_;
2323   MYFLT *rhs_a_;
2324   MYFLT *rhs_b_;
2325   la_i_mc_create_t *lhs;
2326   la_i_mc_create_t *rhs_a;
2327   la_i_mc_create_t *rhs_b;
2328   size_t rowN;
2329   size_t columnN;
init(CSOUND *)2330   int init(CSOUND *) {
2331     toa(lhs_, lhs);
2332     toa(rhs_a_, rhs_a);
2333     toa(rhs_b_, rhs_b);
2334     rowN = gmm::mat_nrows(rhs_a->mc);
2335     columnN = gmm::mat_ncols(rhs_a->mc);
2336     return OK;
2337   }
kontrol(CSOUND *)2338   int kontrol(CSOUND *) {
2339     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2340       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2341         lhs->mc(rowI, columnI) =
2342             rhs_a->mc(rowI, columnI) + rhs_b->mc(rowI, columnI);
2343       }
2344     }
2345     return OK;
2346   }
2347 };
2348 
2349 /**
2350  * Elementwise subtraction.
2351  * The array on the left-hand side can also appear
2352  * on the right-hand side in order to perform a -= b.
2353  */
2354 class la_i_subtract_vr_t : public OpcodeBase<la_i_subtract_vr_t> {
2355 public:
2356   MYFLT *lhs_;
2357   MYFLT *rhs_a_;
2358   MYFLT *rhs_b_;
2359   la_i_vr_create_t *lhs;
2360   la_i_vr_create_t *rhs_a;
2361   la_i_vr_create_t *rhs_b;
init(CSOUND *)2362   int init(CSOUND *) {
2363     toa(lhs_, lhs);
2364     toa(rhs_a_, rhs_a);
2365     toa(rhs_b_, rhs_b);
2366     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2367       lhs->vr[i] = rhs_a->vr[i] - rhs_b->vr[i];
2368     }
2369     return OK;
2370   }
2371 };
2372 
2373 /**
2374  * Elementwise subtraction.
2375  * The array on the left-hand side can also appear
2376  * on the right-hand side in order to perform a -= b.
2377  */
2378 class la_k_subtract_vr_t : public OpcodeBase<la_k_subtract_vr_t> {
2379 public:
2380   MYFLT *lhs_;
2381   MYFLT *rhs_a_;
2382   MYFLT *rhs_b_;
2383   la_i_vr_create_t *lhs;
2384   la_i_vr_create_t *rhs_a;
2385   la_i_vr_create_t *rhs_b;
init(CSOUND *)2386   int init(CSOUND *) {
2387     toa(lhs_, lhs);
2388     toa(rhs_a_, rhs_a);
2389     toa(rhs_b_, rhs_b);
2390     return OK;
2391   }
kontrol(CSOUND *)2392   int kontrol(CSOUND *) {
2393     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2394       lhs->vr[i] = rhs_a->vr[i] - rhs_b->vr[i];
2395     }
2396     return OK;
2397   }
2398 };
2399 
2400 /**
2401  * Elementwise subtraction.
2402  * The array on the left-hand side can also appear
2403  * on the right-hand side in order to perform a -= b.
2404  */
2405 class la_i_subtract_vc_t : public OpcodeBase<la_i_subtract_vc_t> {
2406 public:
2407   MYFLT *lhs_;
2408   MYFLT *rhs_a_;
2409   MYFLT *rhs_b_;
2410   la_i_vc_create_t *lhs;
2411   la_i_vc_create_t *rhs_a;
2412   la_i_vc_create_t *rhs_b;
init(CSOUND *)2413   int init(CSOUND *) {
2414     toa(lhs_, lhs);
2415     toa(rhs_a_, rhs_a);
2416     toa(rhs_b_, rhs_b);
2417     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2418       lhs->vc[i] = rhs_a->vc[i] - rhs_b->vc[i];
2419     }
2420     return OK;
2421   }
2422 };
2423 
2424 /**
2425  * Elementwise subtraction.
2426  * The array on the left-hand side can also appear
2427  * on the right-hand side in order to perform a -= b.
2428  */
2429 class la_k_subtract_vc_t : public OpcodeBase<la_k_subtract_vc_t> {
2430 public:
2431   MYFLT *lhs_;
2432   MYFLT *rhs_a_;
2433   MYFLT *rhs_b_;
2434   la_i_vc_create_t *lhs;
2435   la_i_vc_create_t *rhs_a;
2436   la_i_vc_create_t *rhs_b;
init(CSOUND *)2437   int init(CSOUND *) {
2438     toa(lhs_, lhs);
2439     toa(rhs_a_, rhs_a);
2440     toa(rhs_b_, rhs_b);
2441     return OK;
2442   }
kontrol(CSOUND *)2443   int kontrol(CSOUND *) {
2444     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2445       lhs->vc[i] = rhs_a->vc[i] - rhs_b->vc[i];
2446     }
2447     return OK;
2448   }
2449 };
2450 
2451 /**
2452  * Elementwise subtraction.
2453  * The array on the left-hand side can also appear
2454  * on the right-hand side in order to perform A -= B.
2455  */
2456 class la_i_subtract_mr_t : public OpcodeBase<la_i_subtract_mr_t> {
2457 public:
2458   MYFLT *lhs_;
2459   MYFLT *rhs_a_;
2460   MYFLT *rhs_b_;
2461   la_i_mr_create_t *lhs;
2462   la_i_mr_create_t *rhs_a;
2463   la_i_mr_create_t *rhs_b;
init(CSOUND *)2464   int init(CSOUND *) {
2465     toa(lhs_, lhs);
2466     toa(rhs_a_, rhs_a);
2467     toa(rhs_b_, rhs_b);
2468     size_t rowN = gmm::mat_nrows(rhs_a->mr);
2469     size_t columnN = gmm::mat_ncols(rhs_a->mr);
2470     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2471       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2472         lhs->mr(rowI, columnI) =
2473             rhs_a->mr(rowI, columnI) - rhs_b->mr(rowI, columnI);
2474       }
2475     }
2476     return OK;
2477   }
2478 };
2479 
2480 /**
2481  * Elementwise subtraction.
2482  * The array on the left-hand side can also appear
2483  * on the right-hand side in order to perform A -= B.
2484  */
2485 class la_k_subtract_mr_t : public OpcodeBase<la_k_subtract_mr_t> {
2486 public:
2487   MYFLT *lhs_;
2488   MYFLT *rhs_a_;
2489   MYFLT *rhs_b_;
2490   la_i_mr_create_t *lhs;
2491   la_i_mr_create_t *rhs_a;
2492   la_i_mr_create_t *rhs_b;
2493   size_t rowN;
2494   size_t columnN;
init(CSOUND *)2495   int init(CSOUND *) {
2496     toa(lhs_, lhs);
2497     toa(rhs_a_, rhs_a);
2498     toa(rhs_b_, rhs_b);
2499     rowN = gmm::mat_nrows(rhs_a->mr);
2500     columnN = gmm::mat_ncols(rhs_a->mr);
2501     return OK;
2502   }
kontrol(CSOUND *)2503   int kontrol(CSOUND *) {
2504     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2505       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2506         lhs->mr(rowI, columnI) =
2507             rhs_a->mr(rowI, columnI) - rhs_b->mr(rowI, columnI);
2508       }
2509     }
2510     return OK;
2511   }
2512 };
2513 
2514 /**
2515  * Elementwise subtraction.
2516  * The array on the left-hand side can also appear
2517  * on the right-hand side in order to perform A -= B.
2518  */
2519 class la_i_subtract_mc_t : public OpcodeBase<la_i_subtract_mc_t> {
2520 public:
2521   MYFLT *lhs_;
2522   MYFLT *rhs_a_;
2523   MYFLT *rhs_b_;
2524   la_i_mc_create_t *lhs;
2525   la_i_mc_create_t *rhs_a;
2526   la_i_mc_create_t *rhs_b;
init(CSOUND *)2527   int init(CSOUND *) {
2528     toa(lhs_, lhs);
2529     toa(rhs_a_, rhs_a);
2530     toa(rhs_b_, rhs_b);
2531     size_t rowN = gmm::mat_nrows(rhs_a->mc);
2532     size_t columnN = gmm::mat_ncols(rhs_a->mc);
2533     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2534       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2535         lhs->mc(rowI, columnI) =
2536             rhs_a->mc(rowI, columnI) - rhs_b->mc(rowI, columnI);
2537       }
2538     }
2539     return OK;
2540   }
2541 };
2542 
2543 /**
2544  * Elementwise subtraction.
2545  * The array on the left-hand side can also appear
2546  * on the right-hand side in order to perform A -= B.
2547  */
2548 class la_k_subtract_mc_t : public OpcodeBase<la_k_subtract_vc_t> {
2549 public:
2550   MYFLT *lhs_;
2551   MYFLT *rhs_a_;
2552   MYFLT *rhs_b_;
2553   la_i_mc_create_t *lhs;
2554   la_i_mc_create_t *rhs_a;
2555   la_i_mc_create_t *rhs_b;
2556   size_t rowN;
2557   size_t columnN;
init(CSOUND *)2558   int init(CSOUND *) {
2559     toa(lhs_, lhs);
2560     toa(rhs_a_, rhs_a);
2561     toa(rhs_b_, rhs_b);
2562     rowN = gmm::mat_nrows(rhs_a->mc);
2563     columnN = gmm::mat_ncols(rhs_a->mc);
2564     return OK;
2565   }
kontrol(CSOUND *)2566   int kontrol(CSOUND *) {
2567     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2568       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2569         lhs->mc(rowI, columnI) =
2570             rhs_a->mc(rowI, columnI) - rhs_b->mc(rowI, columnI);
2571       }
2572     }
2573     return OK;
2574   }
2575 };
2576 
2577 /**
2578  * Elementwise multiplication.
2579  * The array on the left-hand side can also appear
2580  * on the right-hand side in order to perform a *= b.
2581  */
2582 class la_i_multiply_vr_t : public OpcodeBase<la_i_multiply_vr_t> {
2583 public:
2584   MYFLT *lhs_;
2585   MYFLT *rhs_a_;
2586   MYFLT *rhs_b_;
2587   la_i_vr_create_t *lhs;
2588   la_i_vr_create_t *rhs_a;
2589   la_i_vr_create_t *rhs_b;
init(CSOUND *)2590   int init(CSOUND *) {
2591     toa(lhs_, lhs);
2592     toa(rhs_a_, rhs_a);
2593     toa(rhs_b_, rhs_b);
2594     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2595       lhs->vr[i] = rhs_a->vr[i] * rhs_b->vr[i];
2596     }
2597     return OK;
2598   }
2599 };
2600 
2601 /**
2602  * Elementwise multiplication.
2603  * The array on the left-hand side can also appear
2604  * on the right-hand side in order to perform a *= b.
2605  */
2606 class la_k_multiply_vr_t : public OpcodeBase<la_k_multiply_vr_t> {
2607 public:
2608   MYFLT *lhs_;
2609   MYFLT *rhs_a_;
2610   MYFLT *rhs_b_;
2611   la_i_vr_create_t *lhs;
2612   la_i_vr_create_t *rhs_a;
2613   la_i_vr_create_t *rhs_b;
init(CSOUND *)2614   int init(CSOUND *) {
2615     toa(lhs_, lhs);
2616     toa(rhs_a_, rhs_a);
2617     toa(rhs_b_, rhs_b);
2618     return OK;
2619   }
kontrol(CSOUND *)2620   int kontrol(CSOUND *) {
2621     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2622       lhs->vr[i] = rhs_a->vr[i] * rhs_b->vr[i];
2623     }
2624     return OK;
2625   }
2626 };
2627 
2628 /**
2629  * Elementwise multiplication.
2630  * The array on the left-hand side can also appear
2631  * on the right-hand side in order to perform a *= b.
2632  */
2633 class la_i_multiply_vc_t : public OpcodeBase<la_i_multiply_vc_t> {
2634 public:
2635   MYFLT *lhs_;
2636   MYFLT *rhs_a_;
2637   MYFLT *rhs_b_;
2638   la_i_vc_create_t *lhs;
2639   la_i_vc_create_t *rhs_a;
2640   la_i_vc_create_t *rhs_b;
init(CSOUND *)2641   int init(CSOUND *) {
2642     toa(lhs_, lhs);
2643     toa(rhs_a_, rhs_a);
2644     toa(rhs_b_, rhs_b);
2645     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2646       lhs->vc[i] = rhs_a->vc[i] * rhs_b->vc[i];
2647     }
2648     return OK;
2649   }
2650 };
2651 
2652 /**
2653  * Elementwise multiplication.
2654  * The array on the left-hand side can also appear
2655  * on the right-hand side in order to perform a *= b.
2656  */
2657 class la_k_multiply_vc_t : public OpcodeBase<la_k_multiply_vc_t> {
2658 public:
2659   MYFLT *lhs_;
2660   MYFLT *rhs_a_;
2661   MYFLT *rhs_b_;
2662   la_i_vc_create_t *lhs;
2663   la_i_vc_create_t *rhs_a;
2664   la_i_vc_create_t *rhs_b;
init(CSOUND *)2665   int init(CSOUND *) {
2666     toa(lhs_, lhs);
2667     toa(rhs_a_, rhs_a);
2668     toa(rhs_b_, rhs_b);
2669     return OK;
2670   }
kontrol(CSOUND *)2671   int kontrol(CSOUND *) {
2672     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2673       lhs->vc[i] = rhs_a->vc[i] * rhs_b->vc[i];
2674     }
2675     return OK;
2676   }
2677 };
2678 
2679 /**
2680  * Elementwise multiplication.
2681  * The array on the left-hand side can also appear
2682  * on the right-hand side in order to perform A *= B.
2683  */
2684 class la_i_multiply_mr_t : public OpcodeBase<la_i_multiply_mr_t> {
2685 public:
2686   MYFLT *lhs_;
2687   MYFLT *rhs_a_;
2688   MYFLT *rhs_b_;
2689   la_i_mr_create_t *lhs;
2690   la_i_mr_create_t *rhs_a;
2691   la_i_mr_create_t *rhs_b;
init(CSOUND *)2692   int init(CSOUND *) {
2693     toa(lhs_, lhs);
2694     toa(rhs_a_, rhs_a);
2695     toa(rhs_b_, rhs_b);
2696     size_t rowN = gmm::mat_nrows(rhs_a->mr);
2697     size_t columnN = gmm::mat_ncols(rhs_a->mr);
2698     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2699       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2700         lhs->mr(rowI, columnI) =
2701             rhs_a->mr(rowI, columnI) * rhs_b->mr(rowI, columnI);
2702       }
2703     }
2704     return OK;
2705   }
2706 };
2707 
2708 /**
2709  * Elementwise multiplication.
2710  * The array on the left-hand side can also appear
2711  * on the right-hand side in order to perform A *= B.
2712  */
2713 class la_k_multiply_mr_t : public OpcodeBase<la_k_multiply_mr_t> {
2714 public:
2715   MYFLT *lhs_;
2716   MYFLT *rhs_a_;
2717   MYFLT *rhs_b_;
2718   la_i_mr_create_t *lhs;
2719   la_i_mr_create_t *rhs_a;
2720   la_i_mr_create_t *rhs_b;
2721   size_t rowN;
2722   size_t columnN;
init(CSOUND *)2723   int init(CSOUND *) {
2724     toa(lhs_, lhs);
2725     toa(rhs_a_, rhs_a);
2726     toa(rhs_b_, rhs_b);
2727     rowN = gmm::mat_nrows(rhs_a->mr);
2728     columnN = gmm::mat_ncols(rhs_a->mr);
2729     return OK;
2730   }
kontrol(CSOUND *)2731   int kontrol(CSOUND *) {
2732     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2733       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2734         lhs->mr(rowI, columnI) =
2735             rhs_a->mr(rowI, columnI) * rhs_b->mr(rowI, columnI);
2736       }
2737     }
2738     return OK;
2739   }
2740 };
2741 
2742 /**
2743  * Elementwise multiplication.
2744  * The array on the left-hand side can also appear
2745  * on the right-hand side in order to perform A *= B.
2746  */
2747 class la_i_multiply_mc_t : public OpcodeBase<la_i_multiply_mc_t> {
2748 public:
2749   MYFLT *lhs_;
2750   MYFLT *rhs_a_;
2751   MYFLT *rhs_b_;
2752   la_i_mc_create_t *lhs;
2753   la_i_mc_create_t *rhs_a;
2754   la_i_mc_create_t *rhs_b;
init(CSOUND *)2755   int init(CSOUND *) {
2756     toa(lhs_, lhs);
2757     toa(rhs_a_, rhs_a);
2758     toa(rhs_b_, rhs_b);
2759     size_t rowN = gmm::mat_nrows(rhs_a->mc);
2760     size_t columnN = gmm::mat_ncols(rhs_a->mc);
2761     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2762       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2763         lhs->mc(rowI, columnI) =
2764             rhs_a->mc(rowI, columnI) * rhs_b->mc(rowI, columnI);
2765       }
2766     }
2767     return OK;
2768   }
2769 };
2770 
2771 /**
2772  * Elementwise multiplication.
2773  * The array on the left-hand side can also appear
2774  * on the right-hand side in order to perform A *= B.
2775  */
2776 class la_k_multiply_mc_t : public OpcodeBase<la_k_multiply_vc_t> {
2777 public:
2778   MYFLT *lhs_;
2779   MYFLT *rhs_a_;
2780   MYFLT *rhs_b_;
2781   la_i_mc_create_t *lhs;
2782   la_i_mc_create_t *rhs_a;
2783   la_i_mc_create_t *rhs_b;
2784   size_t rowN;
2785   size_t columnN;
init(CSOUND *)2786   int init(CSOUND *) {
2787     toa(lhs_, lhs);
2788     toa(rhs_a_, rhs_a);
2789     toa(rhs_b_, rhs_b);
2790     rowN = gmm::mat_nrows(rhs_a->mc);
2791     columnN = gmm::mat_ncols(rhs_a->mc);
2792     return OK;
2793   }
kontrol(CSOUND *)2794   int kontrol(CSOUND *) {
2795     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2796       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2797         lhs->mc(rowI, columnI) =
2798             rhs_a->mc(rowI, columnI) * rhs_b->mc(rowI, columnI);
2799       }
2800     }
2801     return OK;
2802   }
2803 };
2804 
2805 /**
2806  * Elementwise division.
2807  * The array on the left-hand side can also appear
2808  * on the right-hand side in order to perform a /= b.
2809  */
2810 class la_i_divide_vr_t : public OpcodeBase<la_i_divide_vr_t> {
2811 public:
2812   MYFLT *lhs_;
2813   MYFLT *rhs_a_;
2814   MYFLT *rhs_b_;
2815   la_i_vr_create_t *lhs;
2816   la_i_vr_create_t *rhs_a;
2817   la_i_vr_create_t *rhs_b;
init(CSOUND *)2818   int init(CSOUND *) {
2819     toa(lhs_, lhs);
2820     toa(rhs_a_, rhs_a);
2821     toa(rhs_b_, rhs_b);
2822     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2823       lhs->vr[i] = rhs_a->vr[i] / rhs_b->vr[i];
2824     }
2825     return OK;
2826   }
2827 };
2828 
2829 /**
2830  * Elementwise division.
2831  * The array on the left-hand side can also appear
2832  * on the right-hand side in order to perform a /= b.
2833  */
2834 class la_k_divide_vr_t : public OpcodeBase<la_k_divide_vr_t> {
2835 public:
2836   MYFLT *lhs_;
2837   MYFLT *rhs_a_;
2838   MYFLT *rhs_b_;
2839   la_i_vr_create_t *lhs;
2840   la_i_vr_create_t *rhs_a;
2841   la_i_vr_create_t *rhs_b;
init(CSOUND *)2842   int init(CSOUND *) {
2843     toa(lhs_, lhs);
2844     toa(rhs_a_, rhs_a);
2845     toa(rhs_b_, rhs_b);
2846     return OK;
2847   }
kontrol(CSOUND *)2848   int kontrol(CSOUND *) {
2849     for (size_t i = 0, n = rhs_a->vr.size(); i < n; ++i) {
2850       lhs->vr[i] = rhs_a->vr[i] / rhs_b->vr[i];
2851     }
2852     return OK;
2853   }
2854 };
2855 
2856 /**
2857  * Elementwise division.
2858  * The array on the left-hand side can also appear
2859  * on the right-hand side in order to perform a /= b.
2860  */
2861 class la_i_divide_vc_t : public OpcodeBase<la_i_divide_vc_t> {
2862 public:
2863   MYFLT *lhs_;
2864   MYFLT *rhs_a_;
2865   MYFLT *rhs_b_;
2866   la_i_vc_create_t *lhs;
2867   la_i_vc_create_t *rhs_a;
2868   la_i_vc_create_t *rhs_b;
init(CSOUND *)2869   int init(CSOUND *) {
2870     toa(lhs_, lhs);
2871     toa(rhs_a_, rhs_a);
2872     toa(rhs_b_, rhs_b);
2873     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2874       lhs->vc[i] = rhs_a->vc[i] / rhs_b->vc[i];
2875     }
2876     return OK;
2877   }
2878 };
2879 
2880 /**
2881  * Elementwise division.
2882  * The array on the left-hand side can also appear
2883  * on the right-hand side in order to perform a /= b.
2884  */
2885 class la_k_divide_vc_t : public OpcodeBase<la_k_divide_vc_t> {
2886 public:
2887   MYFLT *lhs_;
2888   MYFLT *rhs_a_;
2889   MYFLT *rhs_b_;
2890   la_i_vc_create_t *lhs;
2891   la_i_vc_create_t *rhs_a;
2892   la_i_vc_create_t *rhs_b;
init(CSOUND *)2893   int init(CSOUND *) {
2894     toa(lhs_, lhs);
2895     toa(rhs_a_, rhs_a);
2896     toa(rhs_b_, rhs_b);
2897     return OK;
2898   }
kontrol(CSOUND *)2899   int kontrol(CSOUND *) {
2900     for (size_t i = 0, n = rhs_a->vc.size(); i < n; ++i) {
2901       lhs->vc[i] = rhs_a->vc[i] / rhs_b->vc[i];
2902     }
2903     return OK;
2904   }
2905 };
2906 
2907 /**
2908  * Elementwise division.
2909  * The array on the left-hand side can also appear
2910  * on the right-hand side in order to perform A /= B.
2911  */
2912 class la_i_divide_mr_t : public OpcodeBase<la_i_divide_mr_t> {
2913 public:
2914   MYFLT *lhs_;
2915   MYFLT *rhs_a_;
2916   MYFLT *rhs_b_;
2917   la_i_mr_create_t *lhs;
2918   la_i_mr_create_t *rhs_a;
2919   la_i_mr_create_t *rhs_b;
init(CSOUND *)2920   int init(CSOUND *) {
2921     toa(lhs_, lhs);
2922     toa(rhs_a_, rhs_a);
2923     toa(rhs_b_, rhs_b);
2924     size_t rowN = gmm::mat_nrows(rhs_a->mr);
2925     size_t columnN = gmm::mat_ncols(rhs_a->mr);
2926     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2927       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2928         lhs->mr(rowI, columnI) =
2929             rhs_a->mr(rowI, columnI) / rhs_b->mr(rowI, columnI);
2930       }
2931     }
2932     return OK;
2933   }
2934 };
2935 
2936 /**
2937  * Elementwise division.
2938  * The array on the left-hand side can also appear
2939  * on the right-hand side in order to perform A /= B.
2940  */
2941 class la_k_divide_mr_t : public OpcodeBase<la_k_divide_mr_t> {
2942 public:
2943   MYFLT *lhs_;
2944   MYFLT *rhs_a_;
2945   MYFLT *rhs_b_;
2946   la_i_mr_create_t *lhs;
2947   la_i_mr_create_t *rhs_a;
2948   la_i_mr_create_t *rhs_b;
2949   size_t rowN;
2950   size_t columnN;
init(CSOUND *)2951   int init(CSOUND *) {
2952     toa(lhs_, lhs);
2953     toa(rhs_a_, rhs_a);
2954     toa(rhs_b_, rhs_b);
2955     rowN = gmm::mat_nrows(rhs_a->mr);
2956     columnN = gmm::mat_ncols(rhs_a->mr);
2957     return OK;
2958   }
kontrol(CSOUND *)2959   int kontrol(CSOUND *) {
2960     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2961       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2962         lhs->mr(rowI, columnI) =
2963             rhs_a->mr(rowI, columnI) / rhs_b->mr(rowI, columnI);
2964       }
2965     }
2966     return OK;
2967   }
2968 };
2969 
2970 /**
2971  * Elementwise division.
2972  * The array on the left-hand side can also appear
2973  * on the right-hand side in order to perform A /= B.
2974  */
2975 class la_i_divide_mc_t : public OpcodeBase<la_i_divide_mc_t> {
2976 public:
2977   MYFLT *lhs_;
2978   MYFLT *rhs_a_;
2979   MYFLT *rhs_b_;
2980   la_i_mc_create_t *lhs;
2981   la_i_mc_create_t *rhs_a;
2982   la_i_mc_create_t *rhs_b;
init(CSOUND *)2983   int init(CSOUND *) {
2984     toa(lhs_, lhs);
2985     toa(rhs_a_, rhs_a);
2986     toa(rhs_b_, rhs_b);
2987     size_t rowN = gmm::mat_nrows(rhs_a->mc);
2988     size_t columnN = gmm::mat_ncols(rhs_a->mc);
2989     for (size_t rowI = 0; rowI < rowN; ++rowI) {
2990       for (size_t columnI = 0; columnI < columnN; ++columnI) {
2991         lhs->mc(rowI, columnI) =
2992             rhs_a->mc(rowI, columnI) / rhs_b->mc(rowI, columnI);
2993       }
2994     }
2995     return OK;
2996   }
2997 };
2998 
2999 /**
3000  * Elementwise division.
3001  * The array on the left-hand side can also appear
3002  * on the right-hand side in order to perform A /= B.
3003  */
3004 class la_k_divide_mc_t : public OpcodeBase<la_k_divide_vc_t> {
3005 public:
3006   MYFLT *lhs_;
3007   MYFLT *rhs_a_;
3008   MYFLT *rhs_b_;
3009   la_i_mc_create_t *lhs;
3010   la_i_mc_create_t *rhs_a;
3011   la_i_mc_create_t *rhs_b;
3012   size_t rowN;
3013   size_t columnN;
init(CSOUND *)3014   int init(CSOUND *) {
3015     toa(lhs_, lhs);
3016     toa(rhs_a_, rhs_a);
3017     toa(rhs_b_, rhs_b);
3018     rowN = gmm::mat_nrows(rhs_a->mc);
3019     columnN = gmm::mat_ncols(rhs_a->mc);
3020     return OK;
3021   }
kontrol(CSOUND *)3022   int kontrol(CSOUND *) {
3023     for (size_t rowI = 0; rowI < rowN; ++rowI) {
3024       for (size_t columnI = 0; columnI < columnN; ++columnI) {
3025         lhs->mc(rowI, columnI) =
3026             rhs_a->mc(rowI, columnI) / rhs_b->mc(rowI, columnI);
3027       }
3028     }
3029     return OK;
3030   }
3031 };
3032 
3033 /**
3034  * Elementwise multiplication.
3035  * The array on the left-hand side can also appear
3036  * on the right-hand side in order to perform a *= b.
3037  */
3038 class la_i_dot_vr_t : public OpcodeBase<la_i_dot_vr_t> {
3039 public:
3040   MYFLT *lhs_;
3041   MYFLT *rhs_a_;
3042   MYFLT *rhs_b_;
3043   la_i_vr_create_t *rhs_a;
3044   la_i_vr_create_t *rhs_b;
init(CSOUND *)3045   int init(CSOUND *) {
3046     toa(rhs_a_, rhs_a);
3047     toa(rhs_b_, rhs_b);
3048     *lhs_ = gmm::vect_sp(rhs_a->vr, rhs_b->vr);
3049     return OK;
3050   }
3051 };
3052 
3053 /**
3054  * Elementwise multiplication.
3055  * The array on the left-hand side can also appear
3056  * on the right-hand side in order to perform a *= b.
3057  */
3058 class la_k_dot_vr_t : public OpcodeBase<la_k_dot_vr_t> {
3059 public:
3060   MYFLT *lhs_;
3061   MYFLT *rhs_a_;
3062   MYFLT *rhs_b_;
3063   la_i_vr_create_t *rhs_a;
3064   la_i_vr_create_t *rhs_b;
init(CSOUND *)3065   int init(CSOUND *) {
3066     toa(rhs_a_, rhs_a);
3067     toa(rhs_b_, rhs_b);
3068     return OK;
3069   }
kontrol(CSOUND *)3070   int kontrol(CSOUND *) {
3071     *lhs_ = gmm::vect_sp(rhs_a->vr, rhs_b->vr);
3072     return OK;
3073   }
3074 };
3075 
3076 /**
3077  * Elementwise multiplication.
3078  * The array on the left-hand side can also appear
3079  * on the right-hand side in order to perform a *= b.
3080  */
3081 class la_i_dot_vc_t : public OpcodeBase<la_i_dot_vc_t> {
3082 public:
3083   MYFLT *lhs_r;
3084   MYFLT *lhs_i;
3085   MYFLT *rhs_a_;
3086   MYFLT *rhs_b_;
3087   la_i_vc_create_t *rhs_a;
3088   la_i_vc_create_t *rhs_b;
init(CSOUND *)3089   int init(CSOUND *) {
3090     toa(rhs_a_, rhs_a);
3091     toa(rhs_b_, rhs_b);
3092     std::complex<MYFLT> lhs = gmm::vect_sp(rhs_a->vc, rhs_b->vc);
3093     *lhs_r = lhs.real();
3094     *lhs_i = lhs.imag();
3095     return OK;
3096   }
3097 };
3098 
3099 /**
3100  * Elementwise multiplication.
3101  * The array on the left-hand side can also appear
3102  * on the right-hand side in order to perform a *= b.
3103  */
3104 class la_k_dot_vc_t : public OpcodeBase<la_k_dot_vc_t> {
3105 public:
3106   MYFLT *lhs_r;
3107   MYFLT *lhs_i;
3108   MYFLT *rhs_a_;
3109   MYFLT *rhs_b_;
3110   la_i_vc_create_t *rhs_a;
3111   la_i_vc_create_t *rhs_b;
init(CSOUND *)3112   int init(CSOUND *) {
3113     toa(rhs_a_, rhs_a);
3114     toa(rhs_b_, rhs_b);
3115     return OK;
3116   }
kontrol(CSOUND *)3117   int kontrol(CSOUND *) {
3118     std::complex<MYFLT> lhs = gmm::vect_sp(rhs_a->vc, rhs_b->vc);
3119     *lhs_r = lhs.real();
3120     *lhs_i = lhs.imag();
3121     return OK;
3122   }
3123 };
3124 
3125 class la_i_dot_mr_t : public OpcodeBase<la_i_dot_mr_t> {
3126 public:
3127   MYFLT *lhs_;
3128   MYFLT *rhs_a_;
3129   MYFLT *rhs_b_;
3130   la_i_mr_create_t *lhs;
3131   la_i_mr_create_t *rhs_a;
3132   la_i_mr_create_t *rhs_b;
init(CSOUND *)3133   int init(CSOUND *) {
3134     toa(lhs_, lhs);
3135     toa(rhs_a_, rhs_a);
3136     toa(rhs_b_, rhs_b);
3137     gmm::mult(rhs_a->mr, rhs_b->mr, lhs->mr);
3138     return OK;
3139   }
3140 };
3141 
3142 class la_k_dot_mr_t : public OpcodeBase<la_k_dot_mr_t> {
3143 public:
3144   MYFLT *lhs_;
3145   MYFLT *rhs_a_;
3146   MYFLT *rhs_b_;
3147   la_i_mr_create_t *lhs;
3148   la_i_mr_create_t *rhs_a;
3149   la_i_mr_create_t *rhs_b;
init(CSOUND *)3150   int init(CSOUND *) {
3151     toa(lhs_, lhs);
3152     toa(rhs_a_, rhs_a);
3153     toa(rhs_b_, rhs_b);
3154     gmm::mult(rhs_a->mr, rhs_b->mr, lhs->mr);
3155     return OK;
3156   }
kontrol(CSOUND *)3157   int kontrol(CSOUND *) {
3158     gmm::mult(rhs_a->mr, rhs_b->mr, lhs->mr);
3159     return OK;
3160   }
3161 };
3162 
3163 class la_i_dot_mc_t : public OpcodeBase<la_i_dot_mc_t> {
3164 public:
3165   MYFLT *lhs_;
3166   MYFLT *rhs_a_;
3167   MYFLT *rhs_b_;
3168   la_i_mc_create_t *lhs;
3169   la_i_mc_create_t *rhs_a;
3170   la_i_mc_create_t *rhs_b;
init(CSOUND *)3171   int init(CSOUND *) {
3172     toa(lhs_, lhs);
3173     toa(rhs_a_, rhs_a);
3174     toa(rhs_b_, rhs_b);
3175     gmm::mult(rhs_a->mc, rhs_b->mc, lhs->mc);
3176     return OK;
3177   }
3178 };
3179 
3180 class la_k_dot_mc_t : public OpcodeBase<la_k_dot_mc_t> {
3181 public:
3182   MYFLT *lhs_;
3183   MYFLT *rhs_a_;
3184   MYFLT *rhs_b_;
3185   la_i_mc_create_t *lhs;
3186   la_i_mc_create_t *rhs_a;
3187   la_i_mc_create_t *rhs_b;
init(CSOUND *)3188   int init(CSOUND *) {
3189     toa(lhs_, lhs);
3190     toa(rhs_a_, rhs_a);
3191     toa(rhs_b_, rhs_b);
3192     return OK;
3193   }
kontrol(CSOUND *)3194   int kontrol(CSOUND *) {
3195     gmm::mult(rhs_a->mc, rhs_b->mc, lhs->mc);
3196     return OK;
3197   }
3198 };
3199 
3200 class la_i_dot_mr_vr_t : public OpcodeBase<la_i_dot_mr_vr_t> {
3201 public:
3202   MYFLT *lhs_;
3203   MYFLT *rhs_a_;
3204   MYFLT *rhs_b_;
3205   la_i_vr_create_t *lhs;
3206   la_i_mr_create_t *rhs_a;
3207   la_i_vr_create_t *rhs_b;
init(CSOUND *)3208   int init(CSOUND *) {
3209     toa(lhs_, lhs);
3210     toa(rhs_a_, rhs_a);
3211     toa(rhs_b_, rhs_b);
3212     gmm::mult(rhs_a->mr, rhs_b->vr, lhs->vr);
3213     return OK;
3214   }
3215 };
3216 
3217 class la_k_dot_mr_vr_t : public OpcodeBase<la_k_dot_mr_vr_t> {
3218 public:
3219   MYFLT *lhs_;
3220   MYFLT *rhs_a_;
3221   MYFLT *rhs_b_;
3222   la_i_vr_create_t *lhs;
3223   la_i_mr_create_t *rhs_a;
3224   la_i_vr_create_t *rhs_b;
init(CSOUND *)3225   int init(CSOUND *) {
3226     toa(lhs_, lhs);
3227     toa(rhs_a_, rhs_a);
3228     toa(rhs_b_, rhs_b);
3229     return OK;
3230   }
kontrol(CSOUND *)3231   int kontrol(CSOUND *) {
3232     gmm::mult(rhs_a->mr, rhs_b->vr, lhs->vr);
3233     return OK;
3234   }
3235 };
3236 
3237 class la_i_dot_mc_vc_t : public OpcodeBase<la_i_dot_mc_vc_t> {
3238 public:
3239   MYFLT *lhs_;
3240   MYFLT *rhs_a_;
3241   MYFLT *rhs_b_;
3242   la_i_vc_create_t *lhs;
3243   la_i_mc_create_t *rhs_a;
3244   la_i_vc_create_t *rhs_b;
init(CSOUND *)3245   int init(CSOUND *) {
3246     toa(lhs_, lhs);
3247     toa(rhs_a_, rhs_a);
3248     toa(rhs_b_, rhs_b);
3249     gmm::mult(rhs_a->mc, rhs_b->vc, lhs->vc);
3250     return OK;
3251   }
3252 };
3253 
3254 class la_k_dot_mc_vc_t : public OpcodeBase<la_k_dot_mc_vc_t> {
3255 public:
3256   MYFLT *lhs_;
3257   MYFLT *rhs_a_;
3258   MYFLT *rhs_b_;
3259   la_i_vc_create_t *lhs;
3260   la_i_mc_create_t *rhs_a;
3261   la_i_vc_create_t *rhs_b;
init(CSOUND *)3262   int init(CSOUND *) {
3263     toa(lhs_, lhs);
3264     toa(rhs_a_, rhs_a);
3265     toa(rhs_b_, rhs_b);
3266     return OK;
3267   }
kontrol(CSOUND *)3268   int kontrol(CSOUND *) {
3269     gmm::mult(rhs_a->mc, rhs_b->vc, lhs->vc);
3270     return OK;
3271   }
3272 };
3273 
3274 class la_i_invert_mr_t : public OpcodeBase<la_i_invert_mr_t> {
3275 public:
3276   MYFLT *imr_lhs;
3277   MYFLT *icondition;
3278   MYFLT *imr_rhs;
3279   la_i_mr_create_t *lhs;
3280   la_i_mr_create_t *rhs;
init(CSOUND *)3281   int init(CSOUND *) {
3282     toa(imr_lhs, lhs);
3283     toa(imr_rhs, rhs);
3284     gmm::copy(rhs->mr, lhs->mr);
3285     *icondition = gmm::lu_inverse(lhs->mr);
3286     return OK;
3287   }
3288 };
3289 
3290 class la_k_invert_mr_t : public OpcodeBase<la_k_invert_mr_t> {
3291 public:
3292   MYFLT *imr_lhs;
3293   MYFLT *kcondition;
3294   MYFLT *imr_rhs;
3295   la_i_mr_create_t *lhs;
3296   la_i_mr_create_t *rhs;
init(CSOUND *)3297   int init(CSOUND *) {
3298     toa(imr_lhs, lhs);
3299     toa(imr_rhs, rhs);
3300     return OK;
3301   }
kontrol(CSOUND *)3302   int kontrol(CSOUND *) {
3303     gmm::copy(rhs->mr, lhs->mr);
3304     *kcondition = gmm::lu_inverse(lhs->mr);
3305     return OK;
3306   }
3307 };
3308 
3309 class la_i_invert_mc_t : public OpcodeBase<la_i_invert_mc_t> {
3310 public:
3311   MYFLT *imc_lhs;
3312   MYFLT *icondition_r;
3313   MYFLT *icondition_i;
3314   MYFLT *imc_rhs;
3315   la_i_mc_create_t *lhs;
3316   la_i_mc_create_t *rhs;
init(CSOUND *)3317   int init(CSOUND *) {
3318     toa(imc_lhs, lhs);
3319     toa(imc_rhs, rhs);
3320     gmm::copy(rhs->mc, lhs->mc);
3321     std::complex<MYFLT> condition = gmm::lu_inverse(lhs->mc);
3322     *icondition_r = condition.real();
3323     *icondition_i = condition.imag();
3324     return OK;
3325   }
3326 };
3327 
3328 class la_k_invert_mc_t : public OpcodeBase<la_k_invert_mc_t> {
3329 public:
3330   MYFLT *imc_lhs;
3331   MYFLT *kcondition_r;
3332   MYFLT *kcondition_i;
3333   MYFLT *imc_rhs;
3334   la_i_mc_create_t *lhs;
3335   la_i_mc_create_t *rhs;
init(CSOUND *)3336   int init(CSOUND *) {
3337     toa(imc_lhs, lhs);
3338     toa(imc_rhs, rhs);
3339     return OK;
3340   }
kontrol(CSOUND *)3341   int kontrol(CSOUND *) {
3342     gmm::copy(rhs->mc, lhs->mc);
3343     std::complex<MYFLT> condition = gmm::lu_inverse(lhs->mc);
3344     *kcondition_r = condition.real();
3345     *kcondition_i = condition.imag();
3346     return OK;
3347   }
3348 };
3349 
3350 class la_i_upper_solve_mr_t : public OpcodeBase<la_i_upper_solve_mr_t> {
3351 public:
3352   MYFLT *lhs_;
3353   MYFLT *rhs_;
3354   MYFLT *is_unit;
3355   la_i_vr_create_t *lhs;
3356   la_i_mr_create_t *rhs;
init(CSOUND *)3357   int init(CSOUND *) {
3358     toa(lhs_, lhs);
3359     toa(rhs_, rhs);
3360     gmm::upper_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3361     return OK;
3362   }
3363 };
3364 
3365 class la_k_upper_solve_mr_t : public OpcodeBase<la_k_upper_solve_mr_t> {
3366 public:
3367   MYFLT *lhs_;
3368   MYFLT *rhs_;
3369   MYFLT *is_unit;
3370   la_i_vr_create_t *lhs;
3371   la_i_mr_create_t *rhs;
init(CSOUND *)3372   int init(CSOUND *) {
3373     toa(lhs_, lhs);
3374     toa(rhs_, rhs);
3375     return OK;
3376   }
kontrol(CSOUND *)3377   int kontrol(CSOUND *) {
3378     gmm::upper_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3379     return OK;
3380   }
3381 };
3382 
3383 class la_i_upper_solve_mc_t : public OpcodeBase<la_i_upper_solve_mc_t> {
3384 public:
3385   MYFLT *lhs_;
3386   MYFLT *rhs_;
3387   MYFLT *is_unit;
3388   la_i_vc_create_t *lhs;
3389   la_i_mc_create_t *rhs;
init(CSOUND *)3390   int init(CSOUND *) {
3391     toa(lhs_, lhs);
3392     toa(rhs_, rhs);
3393     gmm::upper_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3394     return OK;
3395   }
3396 };
3397 
3398 class la_k_upper_solve_mc_t : public OpcodeBase<la_k_upper_solve_mc_t> {
3399 public:
3400   MYFLT *lhs_;
3401   MYFLT *rhs_;
3402   MYFLT *is_unit;
3403   la_i_vc_create_t *lhs;
3404   la_i_mc_create_t *rhs;
init(CSOUND *)3405   int init(CSOUND *) {
3406     toa(lhs_, lhs);
3407     toa(rhs_, rhs);
3408     return OK;
3409   }
kontrol(CSOUND *)3410   int kontrol(CSOUND *) {
3411     gmm::upper_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3412     return OK;
3413   }
3414 };
3415 
3416 class la_i_lower_solve_mr_t : public OpcodeBase<la_i_lower_solve_mr_t> {
3417 public:
3418   MYFLT *lhs_;
3419   MYFLT *rhs_;
3420   MYFLT *is_unit;
3421   la_i_vr_create_t *lhs;
3422   la_i_mr_create_t *rhs;
init(CSOUND *)3423   int init(CSOUND *) {
3424     toa(lhs_, lhs);
3425     toa(rhs_, rhs);
3426     gmm::lower_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3427     return OK;
3428   }
3429 };
3430 
3431 class la_k_lower_solve_mr_t : public OpcodeBase<la_k_lower_solve_mr_t> {
3432 public:
3433   MYFLT *lhs_;
3434   MYFLT *rhs_;
3435   MYFLT *is_unit;
3436   la_i_vr_create_t *lhs;
3437   la_i_mr_create_t *rhs;
init(CSOUND *)3438   int init(CSOUND *) {
3439     toa(lhs_, lhs);
3440     toa(rhs_, rhs);
3441     return OK;
3442   }
kontrol(CSOUND *)3443   int kontrol(CSOUND *) {
3444     gmm::lower_tri_solve(rhs->mr, lhs->vr, bool(*is_unit));
3445     return OK;
3446   }
3447 };
3448 
3449 class la_i_lower_solve_mc_t : public OpcodeBase<la_i_lower_solve_mc_t> {
3450 public:
3451   MYFLT *lhs_;
3452   MYFLT *rhs_;
3453   MYFLT *is_unit;
3454   la_i_vc_create_t *lhs;
3455   la_i_mc_create_t *rhs;
init(CSOUND *)3456   int init(CSOUND *) {
3457     toa(lhs_, lhs);
3458     toa(rhs_, rhs);
3459     gmm::lower_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3460     return OK;
3461   }
3462 };
3463 
3464 class la_k_lower_solve_mc_t : public OpcodeBase<la_k_lower_solve_mc_t> {
3465 public:
3466   MYFLT *lhs_;
3467   MYFLT *rhs_;
3468   MYFLT *is_unit;
3469   la_i_vc_create_t *lhs;
3470   la_i_mc_create_t *rhs;
init(CSOUND *)3471   int init(CSOUND *) {
3472     toa(lhs_, lhs);
3473     toa(rhs_, rhs);
3474     return OK;
3475   }
kontrol(CSOUND *)3476   int kontrol(CSOUND *) {
3477     gmm::lower_tri_solve(rhs->mc, lhs->vc, bool(*is_unit));
3478     return OK;
3479   }
3480 };
3481 
3482 class la_i_lu_factor_mr_t : public OpcodeBase<la_i_lu_factor_mr_t> {
3483 public:
3484   MYFLT *lhs_;
3485   MYFLT *pivot_;
3486   MYFLT *isize;
3487   MYFLT *rhs_;
3488   la_i_mr_create_t *lhs;
3489   la_i_vr_create_t *pivot;
3490   la_i_mr_create_t *rhs;
3491 #if defined(GMM_VERSION)
3492   gmm::lapack_ipvt pivot__;
3493 #else
3494   std::vector<size_t> pivot__;
3495 #endif
3496   size_t pivot_size;
init(CSOUND *)3497   int init(CSOUND *) {
3498     toa(lhs_, lhs);
3499     toa(rhs_, pivot);
3500     toa(rhs_, rhs);
3501     pivot_size = gmm::mat_nrows(rhs->mr);
3502     pivot__.resize(pivot_size);
3503     gmm::copy(rhs->mr, lhs->mr);
3504     *isize = gmm::lu_factor(lhs->mr, pivot__);
3505     for (size_t i = 0; i < pivot_size; ++i) {
3506 #if defined(GMM_VERSION)
3507       pivot->vr[i] = pivot__.get(i);
3508 #else
3509       pivot->vr[i] = pivot__[i];
3510 #endif
3511     }
3512     return OK;
3513   }
3514 };
3515 
3516 class la_k_lu_factor_mr_t : public OpcodeBase<la_k_lu_factor_mr_t> {
3517 public:
3518   MYFLT *lhs_;
3519   MYFLT *pivot_;
3520   MYFLT *ksize;
3521   MYFLT *rhs_;
3522   la_i_mr_create_t *lhs;
3523   la_i_vr_create_t *pivot;
3524   la_i_mr_create_t *rhs;
3525 #if defined(GMM_VERSION)
3526   gmm::lapack_ipvt pivot__;
3527 #else
3528   std::vector<size_t> pivot__;
3529 #endif
3530   size_t pivot_size;
init(CSOUND *)3531   int init(CSOUND *) {
3532     toa(lhs_, lhs);
3533     toa(rhs_, pivot);
3534     toa(rhs_, rhs);
3535     return OK;
3536   }
kontrol(CSOUND *)3537   int kontrol(CSOUND *) {
3538     pivot_size = gmm::mat_nrows(rhs->mr);
3539     pivot__.resize(pivot_size);
3540     gmm::copy(rhs->mr, lhs->mr);
3541     *ksize = gmm::lu_factor(lhs->mr, pivot__);
3542     for (size_t i = 0; i < pivot_size; ++i) {
3543 #if defined(GMM_VERSION)
3544       pivot->vr[i] = pivot__.get(i);
3545 #else
3546       pivot->vr[i] = pivot__[i];
3547 #endif
3548     }
3549     return OK;
3550   }
3551 };
3552 
3553 class la_i_lu_factor_mc_t : public OpcodeBase<la_i_lu_factor_mc_t> {
3554 public:
3555   MYFLT *lhs_;
3556   MYFLT *pivot_;
3557   MYFLT *isize;
3558   MYFLT *rhs_;
3559   la_i_mc_create_t *lhs;
3560   la_i_vr_create_t *pivot;
3561   la_i_mc_create_t *rhs;
3562 #if defined(GMM_VERSION)
3563   gmm::lapack_ipvt pivot__;
3564 #else
3565   std::vector<size_t> pivot__;
3566 #endif
3567   size_t pivot_size;
init(CSOUND *)3568   int init(CSOUND *) {
3569     toa(lhs_, lhs);
3570     toa(rhs_, pivot);
3571     toa(rhs_, rhs);
3572     pivot_size = gmm::mat_nrows(rhs->mc);
3573     pivot__.resize(pivot_size);
3574     gmm::copy(rhs->mc, lhs->mc);
3575     *isize = gmm::lu_factor(lhs->mc, pivot__);
3576     for (size_t i = 0; i < pivot_size; ++i) {
3577 #if defined(GMM_VERSION)
3578       pivot->vr[i] = pivot__.get(i);
3579 #else
3580       pivot->vr[i] = pivot__[i];
3581 #endif
3582     }
3583     return OK;
3584   }
3585 };
3586 
3587 class la_k_lu_factor_mc_t : public OpcodeBase<la_k_lu_factor_mc_t> {
3588 public:
3589   MYFLT *lhs_;
3590   MYFLT *pivot_;
3591   MYFLT *ksize;
3592   MYFLT *rhs_;
3593   la_i_mc_create_t *lhs;
3594   la_i_vr_create_t *pivot;
3595   la_i_mc_create_t *rhs;
3596 #if defined(GMM_VERSION)
3597   gmm::lapack_ipvt pivot__;
3598 #else
3599   std::vector<size_t> pivot__;
3600 #endif
3601   size_t pivot_size;
init(CSOUND *)3602   int init(CSOUND *) {
3603     toa(lhs_, lhs);
3604     toa(rhs_, pivot);
3605     toa(rhs_, rhs);
3606     return OK;
3607   }
kontrol(CSOUND *)3608   int kontrol(CSOUND *) {
3609     pivot_size = gmm::mat_nrows(rhs->mc);
3610     pivot__.resize(pivot_size);
3611     gmm::copy(rhs->mc, lhs->mc);
3612     *ksize = gmm::lu_factor(lhs->mc, pivot__);
3613     for (size_t i = 0; i < pivot_size; ++i) {
3614 #if defined(GMM_VERSION)
3615       pivot->vr[i] = pivot__.get(i);
3616 #else
3617       pivot->vr[i] = pivot__[i];
3618 #endif
3619     }
3620     return OK;
3621   }
3622 };
3623 
3624 class la_i_lu_solve_mr_t : public OpcodeBase<la_i_lu_solve_mr_t> {
3625 public:
3626   MYFLT *lhs_x_;
3627   MYFLT *rhs_A_;
3628   MYFLT *rhs_b_;
3629   la_i_vr_create_t *lhs_x;
3630   la_i_mr_create_t *rhs_A;
3631   la_i_vr_create_t *rhs_b;
init(CSOUND *)3632   int init(CSOUND *) {
3633     toa(lhs_x_, lhs_x);
3634     toa(rhs_A_, rhs_A);
3635     toa(rhs_b_, rhs_b);
3636     gmm::lu_solve(rhs_A->mr, lhs_x->vr, rhs_b->vr);
3637     return OK;
3638   }
3639 };
3640 
3641 class la_k_lu_solve_mr_t : public OpcodeBase<la_k_lu_solve_mr_t> {
3642 public:
3643   MYFLT *lhs_x_;
3644   MYFLT *rhs_A_;
3645   MYFLT *rhs_b_;
3646   la_i_vr_create_t *lhs_x;
3647   la_i_mr_create_t *rhs_A;
3648   la_i_vr_create_t *rhs_b;
init(CSOUND *)3649   int init(CSOUND *) {
3650     toa(lhs_x_, lhs_x);
3651     toa(rhs_A_, rhs_A);
3652     toa(rhs_b_, rhs_b);
3653     return OK;
3654   }
kontrol(CSOUND *)3655   int kontrol(CSOUND *) {
3656     gmm::lu_solve(rhs_A->mr, lhs_x->vr, rhs_b->vr);
3657     return OK;
3658   }
3659 };
3660 
3661 class la_i_lu_solve_mc_t : public OpcodeBase<la_i_lu_solve_mc_t> {
3662 public:
3663   MYFLT *lhs_x_;
3664   MYFLT *rhs_A_;
3665   MYFLT *rhs_b_;
3666   la_i_vc_create_t *lhs_x;
3667   la_i_mc_create_t *rhs_A;
3668   la_i_vc_create_t *rhs_b;
init(CSOUND *)3669   int init(CSOUND *) {
3670     toa(lhs_x_, lhs_x);
3671     toa(rhs_A_, rhs_A);
3672     toa(rhs_b_, rhs_b);
3673     gmm::lu_solve(rhs_A->mc, lhs_x->vc, rhs_b->vc);
3674     return OK;
3675   }
3676 };
3677 
3678 class la_k_lu_solve_mc_t : public OpcodeBase<la_k_lu_solve_mc_t> {
3679 public:
3680   MYFLT *lhs_x_;
3681   MYFLT *rhs_A_;
3682   MYFLT *rhs_b_;
3683   la_i_vc_create_t *lhs_x;
3684   la_i_mc_create_t *rhs_A;
3685   la_i_vc_create_t *rhs_b;
init(CSOUND *)3686   int init(CSOUND *) {
3687     toa(lhs_x_, lhs_x);
3688     toa(rhs_A_, rhs_A);
3689     toa(rhs_b_, rhs_b);
3690     return OK;
3691   }
kontrol(CSOUND *)3692   int kontrol(CSOUND *) {
3693     gmm::lu_solve(rhs_A->mc, lhs_x->vc, rhs_b->vc);
3694     return OK;
3695   }
3696 };
3697 
3698 class la_i_qr_factor_mr_t : public OpcodeBase<la_i_qr_factor_mr_t> {
3699 public:
3700   MYFLT *lhs_Q_;
3701   MYFLT *lhs_R_;
3702   MYFLT *rhs_A_;
3703   la_i_mr_create_t *lhs_Q;
3704   la_i_mr_create_t *lhs_R;
3705   la_i_mr_create_t *rhs_A;
init(CSOUND *)3706   int init(CSOUND *) {
3707     toa(lhs_Q_, lhs_Q);
3708     toa(lhs_R_, lhs_R);
3709     toa(rhs_A_, rhs_A);
3710     gmm::qr_factor(rhs_A->mr, lhs_Q->mr, lhs_R->mr);
3711     return OK;
3712   }
3713 };
3714 
3715 class la_k_qr_factor_mr_t : public OpcodeBase<la_k_qr_factor_mr_t> {
3716 public:
3717   MYFLT *lhs_Q_;
3718   MYFLT *lhs_R_;
3719   MYFLT *rhs_A_;
3720   la_i_mr_create_t *lhs_Q;
3721   la_i_mr_create_t *lhs_R;
3722   la_i_mr_create_t *rhs_A;
init(CSOUND *)3723   int init(CSOUND *) {
3724     toa(lhs_Q_, lhs_Q);
3725     toa(lhs_R_, lhs_R);
3726     toa(rhs_A_, rhs_A);
3727     return OK;
3728   }
kontrol(CSOUND *)3729   int kontrol(CSOUND *) {
3730     gmm::qr_factor(rhs_A->mr, lhs_Q->mr, lhs_R->mr);
3731     return OK;
3732   }
3733 };
3734 
3735 class la_i_qr_factor_mc_t : public OpcodeBase<la_i_qr_factor_mc_t> {
3736 public:
3737   MYFLT *lhs_Q_;
3738   MYFLT *lhs_R_;
3739   MYFLT *rhs_A_;
3740   la_i_mc_create_t *lhs_Q;
3741   la_i_mc_create_t *lhs_R;
3742   la_i_mc_create_t *rhs_A;
init(CSOUND *)3743   int init(CSOUND *) {
3744     toa(lhs_Q_, lhs_Q);
3745     toa(lhs_R_, lhs_R);
3746     toa(rhs_A_, rhs_A);
3747     gmm::qr_factor(rhs_A->mc, lhs_Q->mc, lhs_R->mc);
3748     return OK;
3749   }
3750 };
3751 
3752 class la_k_qr_factor_mc_t : public OpcodeBase<la_k_qr_factor_mc_t> {
3753 public:
3754   MYFLT *lhs_Q_;
3755   MYFLT *lhs_R_;
3756   MYFLT *rhs_A_;
3757   la_i_mc_create_t *lhs_Q;
3758   la_i_mc_create_t *lhs_R;
3759   la_i_mc_create_t *rhs_A;
init(CSOUND *)3760   int init(CSOUND *) {
3761     toa(lhs_Q_, lhs_Q);
3762     toa(lhs_R_, lhs_R);
3763     toa(rhs_A_, rhs_A);
3764     return OK;
3765   }
kontrol(CSOUND *)3766   int kontrol(CSOUND *) {
3767     gmm::qr_factor(rhs_A->mc, lhs_Q->mc, lhs_R->mc);
3768     return OK;
3769   }
3770 };
3771 
3772 class la_i_qr_eigen_mr_t : public OpcodeBase<la_i_qr_eigen_mr_t> {
3773 public:
3774   MYFLT *lhs_eigenvalues_;
3775   MYFLT *rhs_A_;
3776   MYFLT *itolerance;
3777   la_i_vr_create_t *lhs_eigenvalues;
3778   la_i_mr_create_t *rhs_A;
init(CSOUND *)3779   int init(CSOUND *) {
3780     toa(lhs_eigenvalues_, lhs_eigenvalues);
3781     toa(rhs_A_, rhs_A);
3782     gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3783                                double(*itolerance));
3784     return OK;
3785   }
3786 };
3787 
3788 class la_k_qr_eigen_mr_t : public OpcodeBase<la_k_qr_eigen_mr_t> {
3789 public:
3790   MYFLT *lhs_eigenvalues_;
3791   MYFLT *rhs_A_;
3792   MYFLT *ktolerance;
3793   la_i_vr_create_t *lhs_eigenvalues;
3794   la_i_mr_create_t *rhs_A;
init(CSOUND *)3795   int init(CSOUND *) {
3796     toa(lhs_eigenvalues_, lhs_eigenvalues);
3797     toa(rhs_A_, rhs_A);
3798     return OK;
3799   }
kontrol(CSOUND *)3800   int kontrol(CSOUND *) {
3801     gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3802                                double(*ktolerance));
3803     return OK;
3804   }
3805 };
3806 
3807 class la_i_qr_eigen_mc_t : public OpcodeBase<la_i_qr_eigen_mc_t> {
3808 public:
3809   MYFLT *lhs_eigenvalues_;
3810   MYFLT *rhs_A_;
3811   MYFLT *itolerance;
3812   la_i_vc_create_t *lhs_eigenvalues;
3813   la_i_mc_create_t *rhs_A;
init(CSOUND *)3814   int init(CSOUND *) {
3815     toa(lhs_eigenvalues_, lhs_eigenvalues);
3816     toa(rhs_A_, rhs_A);
3817     gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3818                                double(*itolerance));
3819     return OK;
3820   }
3821 };
3822 
3823 class la_k_qr_eigen_mc_t : public OpcodeBase<la_k_qr_eigen_mc_t> {
3824 public:
3825   MYFLT *lhs_eigenvalues_;
3826   MYFLT *rhs_A_;
3827   MYFLT *ktolerance;
3828   la_i_vc_create_t *lhs_eigenvalues;
3829   la_i_mc_create_t *rhs_A;
init(CSOUND *)3830   int init(CSOUND *) {
3831     toa(lhs_eigenvalues_, lhs_eigenvalues);
3832     toa(rhs_A_, rhs_A);
3833     return OK;
3834   }
kontrol(CSOUND *)3835   int kontrol(CSOUND *) {
3836     gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3837                                double(*ktolerance));
3838     return OK;
3839   }
3840 };
3841 
3842 class la_i_qr_sym_eigen_mr_t : public OpcodeBase<la_i_qr_sym_eigen_mr_t> {
3843 public:
3844   MYFLT *lhs_eigenvalues_;
3845   MYFLT *lhs_eigenvectors_;
3846   MYFLT *rhs_A_;
3847   MYFLT *itolerance;
3848   la_i_vr_create_t *lhs_eigenvalues;
3849   la_i_mr_create_t *lhs_eigenvectors;
3850   la_i_mr_create_t *rhs_A;
init(CSOUND *)3851   int init(CSOUND *) {
3852     toa(lhs_eigenvalues_, lhs_eigenvalues);
3853     toa(lhs_eigenvectors_, lhs_eigenvectors);
3854     toa(rhs_A_, rhs_A);
3855     gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3856                                lhs_eigenvectors->mr, double(*itolerance));
3857     return OK;
3858   }
3859 };
3860 
3861 class la_k_qr_sym_eigen_mr_t : public OpcodeBase<la_k_qr_sym_eigen_mr_t> {
3862 public:
3863   MYFLT *lhs_eigenvalues_;
3864   MYFLT *lhs_eigenvectors_;
3865   MYFLT *rhs_A_;
3866   MYFLT *ktolerance;
3867   la_i_vr_create_t *lhs_eigenvalues;
3868   la_i_mr_create_t *lhs_eigenvectors;
3869   la_i_mr_create_t *rhs_A;
init(CSOUND *)3870   int init(CSOUND *) {
3871     toa(lhs_eigenvalues_, lhs_eigenvalues);
3872     toa(lhs_eigenvectors_, lhs_eigenvectors);
3873     toa(rhs_A_, rhs_A);
3874     return OK;
3875   }
kontrol(CSOUND *)3876   int kontrol(CSOUND *) {
3877     gmm::implicit_qr_algorithm(rhs_A->mr, lhs_eigenvalues->vr,
3878                                lhs_eigenvectors->mr, double(*ktolerance));
3879     return OK;
3880   }
3881 };
3882 
3883 class la_i_qr_sym_eigen_mc_t : public OpcodeBase<la_i_qr_sym_eigen_mc_t> {
3884 public:
3885   MYFLT *lhs_eigenvalues_;
3886   MYFLT *lhs_eigenvectors_;
3887   MYFLT *rhs_A_;
3888   MYFLT *itolerance;
3889   la_i_vc_create_t *lhs_eigenvalues;
3890   la_i_mc_create_t *lhs_eigenvectors;
3891   la_i_mc_create_t *rhs_A;
init(CSOUND *)3892   int init(CSOUND *) {
3893     toa(lhs_eigenvalues_, lhs_eigenvalues);
3894     toa(lhs_eigenvectors_, lhs_eigenvectors);
3895     toa(rhs_A_, rhs_A);
3896     gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3897                                lhs_eigenvectors->mc, double(*itolerance));
3898     return OK;
3899   }
3900 };
3901 
3902 class la_k_qr_sym_eigen_mc_t : public OpcodeBase<la_k_qr_sym_eigen_mc_t> {
3903 public:
3904   MYFLT *lhs_eigenvalues_;
3905   MYFLT *lhs_eigenvectors_;
3906   MYFLT *rhs_A_;
3907   MYFLT *ktolerance;
3908   la_i_vc_create_t *lhs_eigenvalues;
3909   la_i_mc_create_t *lhs_eigenvectors;
3910   la_i_mc_create_t *rhs_A;
init(CSOUND *)3911   int init(CSOUND *) {
3912     toa(lhs_eigenvalues_, lhs_eigenvalues);
3913     toa(lhs_eigenvectors_, lhs_eigenvectors);
3914     toa(rhs_A_, rhs_A);
3915     return OK;
3916   }
kontrol(CSOUND *)3917   int kontrol(CSOUND *) {
3918     gmm::implicit_qr_algorithm(rhs_A->mc, lhs_eigenvalues->vc,
3919                                lhs_eigenvectors->mc, double(*ktolerance));
3920     return OK;
3921   }
3922 };
3923 
3924 extern "C" {
3925 
csoundModuleCreate(CSOUND * csound)3926 PUBLIC int csoundModuleCreate(CSOUND *csound) { return 0; }
3927 
csoundModuleInit(CSOUND * csound)3928 PUBLIC int csoundModuleInit(CSOUND *csound) {
3929   int status = 0;
3930   status |= csound->AppendOpcode(
3931       csound, "la_i_vr_create", sizeof(la_i_vr_create_t), 0, 1, "i", "i",
3932       (int (*)(CSOUND *, void *)) & la_i_vr_create_t::init_,
3933       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3934   status |= csound->AppendOpcode(
3935       csound, "la_i_vc_create", sizeof(la_i_vr_create_t), 0, 1, "i", "i",
3936       (int (*)(CSOUND *, void *)) & la_i_vc_create_t::init_,
3937       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3938   status |= csound->AppendOpcode(
3939       csound, "la_i_mr_create", sizeof(la_i_mr_create_t), 0, 1, "i", "iio",
3940       (int (*)(CSOUND *, void *)) & la_i_mr_create_t::init_,
3941       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3942   status |= csound->AppendOpcode(
3943       csound, "la_i_mc_create", sizeof(la_i_mc_create_t), 0, 1, "i", "iioo",
3944       (int (*)(CSOUND *, void *)) & la_i_mc_create_t::init_,
3945       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3946   status |= csound->AppendOpcode(
3947       csound, "la_i_size_vr", sizeof(la_i_size_vr_t), 0, 1, "i", "i",
3948       (int (*)(CSOUND *, void *)) & la_i_size_vr_t::init_,
3949       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3950   status |= csound->AppendOpcode(
3951       csound, "la_i_size_vc", sizeof(la_i_size_vc_t), 0, 1, "i", "i",
3952       (int (*)(CSOUND *, void *)) & la_i_size_vc_t::init_,
3953       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3954   status |= csound->AppendOpcode(
3955       csound, "la_i_size_mr", sizeof(la_i_size_mr_t), 0, 1, "ii", "i",
3956       (int (*)(CSOUND *, void *)) & la_i_size_mr_t::init_,
3957       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3958   status |= csound->AppendOpcode(
3959       csound, "la_i_size_mc", sizeof(la_i_size_mc_t), 0, 1, "ii", "i",
3960       (int (*)(CSOUND *, void *)) & la_i_size_mc_t::init_,
3961       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3962   status |= csound->AppendOpcode(
3963       csound, "la_k_current_f", sizeof(la_k_current_f_t), 0, 3, "k", "f",
3964       (int (*)(CSOUND *, void *)) & la_k_current_f_t::init_,
3965       (int (*)(CSOUND *, void *)) & la_k_current_f_t::kontrol_,
3966       (int (*)(CSOUND *, void *))0);
3967   status |= csound->AppendOpcode(
3968       csound, "la_k_current_vr", sizeof(la_k_current_vr_t), 0, 3, "k", "i",
3969       (int (*)(CSOUND *, void *)) & la_k_current_vr_t::init_,
3970       (int (*)(CSOUND *, void *)) & la_k_current_vr_t::kontrol_,
3971       (int (*)(CSOUND *, void *))0);
3972   status |= csound->AppendOpcode(
3973       csound, "la_i_print_vr", sizeof(la_i_print_vr_t), 0, 1, "", "i",
3974       (int (*)(CSOUND *, void *)) & la_i_print_vr_t::init_,
3975       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3976   status |= csound->AppendOpcode(
3977       csound, "la_i_print_vc", sizeof(la_i_print_vc_t), 0, 1, "", "i",
3978       (int (*)(CSOUND *, void *)) & la_i_print_vc_t::init_,
3979       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3980   status |= csound->AppendOpcode(
3981       csound, "la_i_print_mr", sizeof(la_i_print_mr_t), 0, 1, "", "i",
3982       (int (*)(CSOUND *, void *)) & la_i_print_mr_t::init_,
3983       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3984   status |= csound->AppendOpcode(
3985       csound, "la_i_print_mc", sizeof(la_i_print_mc_t), 0, 1, "", "i",
3986       (int (*)(CSOUND *, void *)) & la_i_print_mc_t::init_,
3987       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3988   status |= csound->AppendOpcode(
3989       csound, "la_i_assign_vr", sizeof(la_i_assign_vr_t), 0, 1, "i", "i",
3990       (int (*)(CSOUND *, void *)) & la_i_assign_vr_t::init_,
3991       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
3992   status |= csound->AppendOpcode(
3993       csound, "la_k_assign_vr", sizeof(la_k_assign_vr_t), 0, 3, "i", "k",
3994       (int (*)(CSOUND *, void *)) & la_k_assign_vr_t::init_,
3995       (int (*)(CSOUND *, void *)) & la_k_assign_vr_t::kontrol_,
3996       (int (*)(CSOUND *, void *))0);
3997   status |= csound->AppendOpcode(
3998       csound, "la_i_assign_vc", sizeof(la_i_assign_vc_t), 0, 1, "i", "i",
3999       (int (*)(CSOUND *, void *)) & la_i_assign_vc_t::init_,
4000       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4001   status |= csound->AppendOpcode(
4002       csound, "la_k_assign_vc", sizeof(la_k_assign_vc_t), 0, 3, "i", "k",
4003       (int (*)(CSOUND *, void *)) & la_k_assign_vc_t::init_,
4004       (int (*)(CSOUND *, void *)) & la_k_assign_vc_t::kontrol_,
4005       (int (*)(CSOUND *, void *))0);
4006   status |= csound->AppendOpcode(
4007       csound, "la_i_assign_mr", sizeof(la_i_assign_mr_t), 0, 1, "i", "i",
4008       (int (*)(CSOUND *, void *)) & la_i_assign_mr_t::init_,
4009       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4010   status |= csound->AppendOpcode(
4011       csound, "la_k_assign_mr", sizeof(la_k_assign_mr_t), 0, 3, "i", "k",
4012       (int (*)(CSOUND *, void *)) & la_k_assign_mr_t::init_,
4013       (int (*)(CSOUND *, void *)) & la_k_assign_mr_t::kontrol_,
4014       (int (*)(CSOUND *, void *))0);
4015   status |= csound->AppendOpcode(
4016       csound, "la_i_assign_mc", sizeof(la_i_assign_mc_t), 0, 1, "i", "i",
4017       (int (*)(CSOUND *, void *)) & la_i_assign_mc_t::init_,
4018       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4019   status |= csound->AppendOpcode(
4020       csound, "la_k_assign_mc", sizeof(la_k_assign_mc_t), 0, 3, "i", "k",
4021       (int (*)(CSOUND *, void *)) & la_k_assign_mc_t::init_,
4022       (int (*)(CSOUND *, void *)) & la_k_assign_mc_t::kontrol_,
4023       (int (*)(CSOUND *, void *))0);
4024   status |= csound->AppendOpcode(
4025       csound, "la_k_assign_a", sizeof(la_k_assign_a_t), 0, 3, "i", "a",
4026       (int (*)(CSOUND *, void *)) & la_k_assign_a_t::init_,
4027       (int (*)(CSOUND *, void *)) & la_k_assign_a_t::kontrol_,
4028       (int (*)(CSOUND *, void *))0);
4029   status |= csound->AppendOpcode(
4030       csound, "la_i_assign_t", sizeof(la_i_assign_t_t), TR, 1, "i", "i",
4031       (int (*)(CSOUND *, void *)) & la_i_assign_t_t::init_,
4032       (int (*)(CSOUND *, void *)) & la_i_assign_t_t::kontrol_,
4033       (int (*)(CSOUND *, void *))0);
4034   status |= csound->AppendOpcode(
4035       csound, "la_k_assign_t", sizeof(la_k_assign_t_t), TR, 3, "i", "k",
4036       (int (*)(CSOUND *, void *)) & la_k_assign_t_t::init_,
4037       (int (*)(CSOUND *, void *)) & la_k_assign_t_t::kontrol_,
4038       (int (*)(CSOUND *, void *))0);
4039   status |= csound->AppendOpcode(
4040       csound, "la_k_assign_f", sizeof(la_k_assign_f_t), 0, 3, "i", "f",
4041       (int (*)(CSOUND *, void *)) & la_k_assign_f_t::init_,
4042       (int (*)(CSOUND *, void *)) & la_k_assign_f_t::kontrol_,
4043       (int (*)(CSOUND *, void *))0);
4044   status |= csound->AppendOpcode(
4045       csound, "la_k_a_assign", sizeof(la_k_a_assign_t), 0, 3, "a", "k",
4046       (int (*)(CSOUND *, void *)) & la_k_a_assign_t::init_,
4047       (int (*)(CSOUND *, void *)) & la_k_a_assign_t::kontrol_,
4048       (int (*)(CSOUND *, void *))0);
4049   status |= csound->AppendOpcode(
4050       csound, "la_i_t_assign", sizeof(la_i_t_assign_t), TW, 1, "i", "i",
4051       (int (*)(CSOUND *, void *)) & la_i_t_assign_t::init_,
4052       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4053   status |= csound->AppendOpcode(
4054       csound, "la_k_t_assign", sizeof(la_k_t_assign_t), TW, 3, "i", "k",
4055       (int (*)(CSOUND *, void *)) & la_k_t_assign_t::init_,
4056       (int (*)(CSOUND *, void *)) & la_k_t_assign_t::kontrol_,
4057       (int (*)(CSOUND *, void *))0);
4058   status |= csound->AppendOpcode(
4059       csound, "la_k_f_assign", sizeof(la_k_f_assign_t), 0, 3, "f", "p",
4060       (int (*)(CSOUND *, void *)) & la_k_f_assign_t::init_,
4061       (int (*)(CSOUND *, void *)) & la_k_f_assign_t::kontrol_,
4062       (int (*)(CSOUND *, void *))0);
4063   status |= csound->AppendOpcode(
4064       csound, "la_i_random_vr", sizeof(la_i_random_vr_t), 0, 1, "i", "p",
4065       (int (*)(CSOUND *, void *)) & la_i_random_vr_t::init_,
4066       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4067   status |= csound->AppendOpcode(
4068       csound, "la_k_random_vr", sizeof(la_k_random_vr_t), 0, 3, "i", "p",
4069       (int (*)(CSOUND *, void *)) & la_k_random_vr_t::init_,
4070       (int (*)(CSOUND *, void *)) & la_k_random_vr_t::kontrol_,
4071       (int (*)(CSOUND *, void *))0);
4072   status |= csound->AppendOpcode(
4073       csound, "la_i_random_vc", sizeof(la_i_random_vc_t), 0, 1, "i", "p",
4074       (int (*)(CSOUND *, void *)) & la_i_random_vc_t::init_,
4075       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4076   status |= csound->AppendOpcode(
4077       csound, "la_k_random_vc", sizeof(la_k_random_vc_t), 0, 3, "i", "p",
4078       (int (*)(CSOUND *, void *)) & la_k_random_vc_t::init_,
4079       (int (*)(CSOUND *, void *)) & la_k_random_vc_t::kontrol_,
4080       (int (*)(CSOUND *, void *))0);
4081   status |= csound->AppendOpcode(
4082       csound, "la_i_random_mr", sizeof(la_i_random_mr_t), 0, 1, "i", "p",
4083       (int (*)(CSOUND *, void *)) & la_i_random_mr_t::init_,
4084       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4085   status |= csound->AppendOpcode(
4086       csound, "la_k_random_mr", sizeof(la_k_random_mr_t), 0, 3, "i", "p",
4087       (int (*)(CSOUND *, void *)) & la_k_random_mr_t::init_,
4088       (int (*)(CSOUND *, void *)) & la_k_random_mr_t::kontrol_,
4089       (int (*)(CSOUND *, void *))0);
4090   status |= csound->AppendOpcode(
4091       csound, "la_i_random_mc", sizeof(la_i_random_mc_t), 0, 1, "i", "p",
4092       (int (*)(CSOUND *, void *)) & la_i_random_mc_t::init_,
4093       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4094   status |= csound->AppendOpcode(
4095       csound, "la_k_random_mc", sizeof(la_k_random_mc_t), 0, 3, "i", "p",
4096       (int (*)(CSOUND *, void *)) & la_k_random_mc_t::init_,
4097       (int (*)(CSOUND *, void *)) & la_k_random_mc_t::kontrol_,
4098       (int (*)(CSOUND *, void *))0);
4099   status |= csound->AppendOpcode(
4100       csound, "la_i_vr_set", sizeof(la_i_vr_set_t), 0, 1, "i", "ii",
4101       (int (*)(CSOUND *, void *)) & la_i_vr_set_t::init_,
4102       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4103   status |= csound->AppendOpcode(
4104       csound, "la_k_vr_set", sizeof(la_k_vr_set_t), 0, 3, "i", "kk",
4105       (int (*)(CSOUND *, void *)) & la_k_vr_set_t::init_,
4106       (int (*)(CSOUND *, void *)) & la_k_vr_set_t::kontrol_,
4107       (int (*)(CSOUND *, void *))0);
4108   status |= csound->AppendOpcode(
4109       csound, "la_i_vc_set", sizeof(la_i_vc_set_t), 0, 1, "i", "iii",
4110       (int (*)(CSOUND *, void *)) & la_i_vc_set_t::init_,
4111       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4112   status |= csound->AppendOpcode(
4113       csound, "la_k_vc_set", sizeof(la_k_vc_set_t), 0, 3, "i", "kkk",
4114       (int (*)(CSOUND *, void *)) & la_k_vc_set_t::init_,
4115       (int (*)(CSOUND *, void *)) & la_k_vc_set_t::kontrol_,
4116       (int (*)(CSOUND *, void *))0);
4117   status |= csound->AppendOpcode(
4118       csound, "la_i_mr_set", sizeof(la_i_mr_set_t), 0, 1, "i", "iii",
4119       (int (*)(CSOUND *, void *)) & la_i_mr_set_t::init_,
4120       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4121   status |= csound->AppendOpcode(
4122       csound, "la_k_mr_set", sizeof(la_k_mr_set_t), 0, 3, "i", "kkk",
4123       (int (*)(CSOUND *, void *)) & la_k_mr_set_t::init_,
4124       (int (*)(CSOUND *, void *)) & la_k_mr_set_t::kontrol_,
4125       (int (*)(CSOUND *, void *))0);
4126   status |= csound->AppendOpcode(
4127       csound, "la_i_mc_set", sizeof(la_i_mc_set_t), 0, 1, "i", "iiii",
4128       (int (*)(CSOUND *, void *)) & la_i_mc_set_t::init_,
4129       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4130   status |= csound->AppendOpcode(
4131       csound, "la_k_mc_set", sizeof(la_k_mc_set_t), 0, 3, "i", "kkkk",
4132       (int (*)(CSOUND *, void *)) & la_k_mc_set_t::init_,
4133       (int (*)(CSOUND *, void *)) & la_k_mc_set_t::kontrol_,
4134       (int (*)(CSOUND *, void *))0);
4135 
4136   status |= csound->AppendOpcode(
4137       csound, "la_i_get_vr", sizeof(la_i_get_vr_t), 0, 1, "i", "ii",
4138       (int (*)(CSOUND *, void *)) & la_i_get_vr_t::init_,
4139       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4140   status |= csound->AppendOpcode(
4141       csound, "la_k_get_vr", sizeof(la_k_get_vr_t), 0, 3, "k", "ik",
4142       (int (*)(CSOUND *, void *)) & la_k_get_vr_t::init_,
4143       (int (*)(CSOUND *, void *)) & la_k_get_vr_t::kontrol_,
4144       (int (*)(CSOUND *, void *))0);
4145   status |= csound->AppendOpcode(
4146       csound, "la_i_get_vc", sizeof(la_i_get_vc_t), 0, 1, "ii", "ii",
4147       (int (*)(CSOUND *, void *)) & la_i_get_vc_t::init_,
4148       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4149   status |= csound->AppendOpcode(
4150       csound, "la_k_get_vc", sizeof(la_k_get_vc_t), 0, 3, "kk", "ik",
4151       (int (*)(CSOUND *, void *)) & la_k_get_vc_t::init_,
4152       (int (*)(CSOUND *, void *)) & la_k_get_vc_t::kontrol_,
4153       (int (*)(CSOUND *, void *))0);
4154   status |= csound->AppendOpcode(
4155       csound, "la_i_get_mr", sizeof(la_i_get_mr_t), 0, 1, "i", "iii",
4156       (int (*)(CSOUND *, void *)) & la_i_get_mr_t::init_,
4157       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4158   status |= csound->AppendOpcode(
4159       csound, "la_k_get_mr", sizeof(la_k_get_mr_t), 0, 3, "k", "ikk",
4160       (int (*)(CSOUND *, void *)) & la_k_get_mr_t::init_,
4161       (int (*)(CSOUND *, void *)) & la_k_get_mr_t::kontrol_,
4162       (int (*)(CSOUND *, void *))0);
4163   status |= csound->AppendOpcode(
4164       csound, "la_i_get_mc", sizeof(la_i_get_mc_t), 0, 1, "ii", "iii",
4165       (int (*)(CSOUND *, void *)) & la_i_get_mc_t::init_,
4166       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4167   status |= csound->AppendOpcode(
4168       csound, "la_k_get_mc", sizeof(la_k_get_mc_t), 0, 3, "kk", "ikk",
4169       (int (*)(CSOUND *, void *)) & la_k_get_mc_t::init_,
4170       (int (*)(CSOUND *, void *)) & la_k_get_mc_t::kontrol_,
4171       (int (*)(CSOUND *, void *))0);
4172   status |= csound->AppendOpcode(
4173       csound, "la_i_transpose_mr", sizeof(la_i_transpose_mr_t), 0, 1, "i", "i",
4174       (int (*)(CSOUND *, void *)) & la_i_transpose_mr_t::init_,
4175       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4176   status |= csound->AppendOpcode(
4177       csound, "la_i_transpose_mr", sizeof(la_k_transpose_mr_t), 0, 3, "i", "k",
4178       (int (*)(CSOUND *, void *)) & la_k_transpose_mr_t::init_,
4179       (int (*)(CSOUND *, void *)) & la_k_transpose_mr_t::kontrol_,
4180       (int (*)(CSOUND *, void *))0);
4181   status |= csound->AppendOpcode(
4182       csound, "la_i_transpose_mc", sizeof(la_i_transpose_mc_t), 0, 1, "i", "i",
4183       (int (*)(CSOUND *, void *)) & la_i_transpose_mc_t::init_,
4184       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4185   status |= csound->AppendOpcode(
4186       csound, "la_i_transpose_mc", sizeof(la_k_transpose_mc_t), 0, 2, "i", "i",
4187       (int (*)(CSOUND *, void *)) & la_k_transpose_mc_t::init_,
4188       (int (*)(CSOUND *, void *)) & la_k_transpose_mc_t::kontrol_,
4189       (int (*)(CSOUND *, void *))0);
4190   status |= csound->AppendOpcode(
4191       csound, "la_i_conjugate_vr", sizeof(la_i_conjugate_vr_t), 0, 1, "i", "i",
4192       (int (*)(CSOUND *, void *)) & la_i_conjugate_vr_t::init_,
4193       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4194   status |= csound->AppendOpcode(
4195       csound, "la_k_conjugate_vr", sizeof(la_k_conjugate_vr_t), 0, 3, "i", "i",
4196       (int (*)(CSOUND *, void *)) & la_k_conjugate_vr_t::init_,
4197       (int (*)(CSOUND *, void *)) & la_k_conjugate_vr_t::kontrol_,
4198       (int (*)(CSOUND *, void *))0);
4199   status |= csound->AppendOpcode(
4200       csound, "la_i_conjugate_vc", sizeof(la_i_conjugate_vc_t), 0, 1, "i", "i",
4201       (int (*)(CSOUND *, void *)) & la_i_conjugate_vc_t::init_,
4202       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4203   status |= csound->AppendOpcode(
4204       csound, "la_k_conjugate_vc", sizeof(la_k_conjugate_vc_t), 0, 3, "i", "i",
4205       (int (*)(CSOUND *, void *)) & la_k_conjugate_vc_t::init_,
4206       (int (*)(CSOUND *, void *)) & la_k_conjugate_vc_t::kontrol_,
4207       (int (*)(CSOUND *, void *))0);
4208   status |= csound->AppendOpcode(
4209       csound, "la_i_conjugate_mr", sizeof(la_i_conjugate_mr_t), 0, 1, "i", "i",
4210       (int (*)(CSOUND *, void *)) & la_i_conjugate_mr_t::init_,
4211       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4212   status |= csound->AppendOpcode(
4213       csound, "la_k_conjugate_mr", sizeof(la_k_conjugate_mr_t), 0, 3, "i", "i",
4214       (int (*)(CSOUND *, void *)) & la_k_conjugate_mr_t::init_,
4215       (int (*)(CSOUND *, void *)) & la_k_conjugate_mr_t::kontrol_,
4216       (int (*)(CSOUND *, void *))0);
4217   status |= csound->AppendOpcode(
4218       csound, "la_i_conjugate_mc", sizeof(la_i_conjugate_mc_t), 0, 1, "i", "i",
4219       (int (*)(CSOUND *, void *)) & la_i_conjugate_mc_t::init_,
4220       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4221   status |= csound->AppendOpcode(
4222       csound, "la_k_conjugate_mc", sizeof(la_k_conjugate_mc_t), 0, 3, "i", "i",
4223       (int (*)(CSOUND *, void *)) & la_k_conjugate_mc_t::init_,
4224       (int (*)(CSOUND *, void *)) & la_k_conjugate_mc_t::kontrol_,
4225       (int (*)(CSOUND *, void *))0);
4226   status |= csound->AppendOpcode(
4227       csound, "la_i_norm1_vr", sizeof(la_i_norm1_vr_t), 0, 1, "i", "i",
4228       (int (*)(CSOUND *, void *)) & la_i_norm1_vr_t::init_,
4229       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4230   status |= csound->AppendOpcode(
4231       csound, "la_k_norm1_vr", sizeof(la_k_norm1_vr_t), 0, 3, "k", "i",
4232       (int (*)(CSOUND *, void *)) & la_k_norm1_vr_t::init_,
4233       (int (*)(CSOUND *, void *)) & la_k_norm1_vr_t::kontrol_,
4234       (int (*)(CSOUND *, void *))0);
4235   status |= csound->AppendOpcode(
4236       csound, "la_i_norm1_vc", sizeof(la_i_norm1_vc_t), 0, 1, "i", "i",
4237       (int (*)(CSOUND *, void *)) & la_i_norm1_vc_t::init_,
4238       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4239   status |= csound->AppendOpcode(
4240       csound, "la_k_norm1_vc", sizeof(la_k_norm1_vc_t), 0, 3, "k", "i",
4241       (int (*)(CSOUND *, void *)) & la_k_norm1_vc_t::init_,
4242       (int (*)(CSOUND *, void *)) & la_k_norm1_vc_t::kontrol_,
4243       (int (*)(CSOUND *, void *))0);
4244   status |= csound->AppendOpcode(
4245       csound, "la_i_norm1_mr", sizeof(la_i_norm1_mr_t), 0, 1, "i", "i",
4246       (int (*)(CSOUND *, void *)) & la_i_norm1_mr_t::init_,
4247       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4248   status |= csound->AppendOpcode(
4249       csound, "la_k_norm1_mr", sizeof(la_k_norm1_mr_t), 0, 3, "k", "i",
4250       (int (*)(CSOUND *, void *)) & la_k_norm1_mr_t::init_,
4251       (int (*)(CSOUND *, void *)) & la_k_norm1_mr_t::kontrol_,
4252       (int (*)(CSOUND *, void *))0);
4253   status |= csound->AppendOpcode(
4254       csound, "la_i_norm1_mc", sizeof(la_i_norm1_mc_t), 0, 1, "i", "i",
4255       (int (*)(CSOUND *, void *)) & la_i_norm1_mc_t::init_,
4256       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4257   status |= csound->AppendOpcode(
4258       csound, "la_k_norm1_mc", sizeof(la_k_norm1_mc_t), 0, 3, "k", "i",
4259       (int (*)(CSOUND *, void *)) & la_k_norm1_mc_t::init_,
4260       (int (*)(CSOUND *, void *)) & la_k_norm1_mc_t::kontrol_,
4261       (int (*)(CSOUND *, void *))0);
4262   status |= csound->AppendOpcode(
4263       csound, "la_i_norm_euclid_vr", sizeof(la_i_norm_euclid_vr_t), 0, 1, "i",
4264       "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_vr_t::init_,
4265       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4266   status |= csound->AppendOpcode(
4267       csound, "la_k_norm_euclid_vr", sizeof(la_k_norm_euclid_vr_t), 0, 3, "k",
4268       "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vr_t::init_,
4269       (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vr_t::kontrol_,
4270       (int (*)(CSOUND *, void *))0);
4271   status |= csound->AppendOpcode(
4272       csound, "la_i_norm_euclid_vc", sizeof(la_i_norm_euclid_vc_t), 0, 1, "i",
4273       "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_vc_t::init_,
4274       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4275   status |= csound->AppendOpcode(
4276       csound, "la_k_norm_euclid_vc", sizeof(la_k_norm_euclid_vc_t), 0, 3, "k",
4277       "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vc_t::init_,
4278       (int (*)(CSOUND *, void *)) & la_k_norm_euclid_vc_t::kontrol_,
4279       (int (*)(CSOUND *, void *))0);
4280   status |= csound->AppendOpcode(
4281       csound, "la_i_norm_euclid_mr", sizeof(la_i_norm_euclid_mr_t), 0, 1, "i",
4282       "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_mr_t::init_,
4283       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4284   status |= csound->AppendOpcode(
4285       csound, "la_k_norm_euclid_mr", sizeof(la_k_norm_euclid_mr_t), 0, 3, "k",
4286       "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mr_t::init_,
4287       (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mr_t::kontrol_,
4288       (int (*)(CSOUND *, void *))0);
4289   status |= csound->AppendOpcode(
4290       csound, "la_i_norm_euclid_mc", sizeof(la_i_norm_euclid_mc_t), 0, 1, "i",
4291       "i", (int (*)(CSOUND *, void *)) & la_i_norm_euclid_mc_t::init_,
4292       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4293   status |= csound->AppendOpcode(
4294       csound, "la_k_norm_euclid_mc", sizeof(la_k_norm_euclid_mc_t), 0, 3, "k",
4295       "i", (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mc_t::init_,
4296       (int (*)(CSOUND *, void *)) & la_k_norm_euclid_mc_t::kontrol_,
4297       (int (*)(CSOUND *, void *))0);
4298   status |= csound->AppendOpcode(
4299       csound, "la_i_distance_vr", sizeof(la_i_distance_vr_t), 0, 1, "i", "ii",
4300       (int (*)(CSOUND *, void *)) & la_i_distance_vr_t::init_,
4301       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4302   status |= csound->AppendOpcode(
4303       csound, "la_k_distance_vr", sizeof(la_k_distance_vr_t), 0, 3, "k", "ii",
4304       (int (*)(CSOUND *, void *)) & la_k_distance_vr_t::init_,
4305       (int (*)(CSOUND *, void *)) & la_k_distance_vr_t::kontrol_,
4306       (int (*)(CSOUND *, void *))0);
4307   status |= csound->AppendOpcode(
4308       csound, "la_i_distance_vc", sizeof(la_i_distance_vc_t), 0, 1, "i", "ii",
4309       (int (*)(CSOUND *, void *)) & la_i_distance_vc_t::init_,
4310       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4311   status |= csound->AppendOpcode(
4312       csound, "la_k_distance_vc", sizeof(la_k_distance_vc_t), 0, 3, "k", "ii",
4313       (int (*)(CSOUND *, void *)) & la_k_distance_vc_t::init_,
4314       (int (*)(CSOUND *, void *)) & la_k_distance_vc_t::kontrol_,
4315       (int (*)(CSOUND *, void *))0);
4316   status |= csound->AppendOpcode(
4317       csound, "la_i_norm_max_mr", sizeof(la_i_norm_max_mr_t), 0, 1, "i", "i",
4318       (int (*)(CSOUND *, void *)) & la_i_norm_max_mr_t::init_,
4319       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4320   status |= csound->AppendOpcode(
4321       csound, "la_k_norm_max_mr", sizeof(la_k_norm_max_mr_t), 0, 3, "k", "i",
4322       (int (*)(CSOUND *, void *)) & la_k_norm_max_mr_t::init_,
4323       (int (*)(CSOUND *, void *)) & la_k_norm_max_mr_t::kontrol_,
4324       (int (*)(CSOUND *, void *))0);
4325   status |= csound->AppendOpcode(
4326       csound, "la_i_norm_max_mc", sizeof(la_i_norm_max_mc_t), 0, 1, "i", "i",
4327       (int (*)(CSOUND *, void *)) & la_i_norm_max_mc_t::init_,
4328       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4329   status |= csound->AppendOpcode(
4330       csound, "la_k_norm_max_mc", sizeof(la_k_norm_max_mc_t), 0, 3, "k", "i",
4331       (int (*)(CSOUND *, void *)) & la_k_norm_max_mc_t::init_,
4332       (int (*)(CSOUND *, void *)) & la_k_norm_max_mc_t::kontrol_,
4333       (int (*)(CSOUND *, void *))0);
4334   status |= csound->AppendOpcode(
4335       csound, "la_i_norm_inf_vr", sizeof(la_i_norm_inf_vr_t), 0, 1, "i", "i",
4336       (int (*)(CSOUND *, void *)) & la_i_norm_inf_vr_t::init_,
4337       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4338   status |= csound->AppendOpcode(
4339       csound, "la_k_norm_inf_vr", sizeof(la_k_norm_inf_vr_t), 0, 3, "k", "i",
4340       (int (*)(CSOUND *, void *)) & la_k_norm_inf_vr_t::init_,
4341       (int (*)(CSOUND *, void *)) & la_k_norm_inf_vr_t::kontrol_,
4342       (int (*)(CSOUND *, void *))0);
4343   status |= csound->AppendOpcode(
4344       csound, "la_i_norm_inf_vc", sizeof(la_i_norm_inf_vc_t), 0, 1, "i", "i",
4345       (int (*)(CSOUND *, void *)) & la_i_norm_inf_vc_t::init_,
4346       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4347   status |= csound->AppendOpcode(
4348       csound, "la_k_norm_inf_vc", sizeof(la_k_norm_inf_vc_t), 0, 3, "k", "i",
4349       (int (*)(CSOUND *, void *)) & la_k_norm_inf_vc_t::init_,
4350       (int (*)(CSOUND *, void *)) & la_k_norm_inf_vc_t::kontrol_,
4351       (int (*)(CSOUND *, void *))0);
4352   status |= csound->AppendOpcode(
4353       csound, "la_i_norm_inf_mr", sizeof(la_i_norm_inf_mr_t), 0, 1, "i", "i",
4354       (int (*)(CSOUND *, void *)) & la_i_norm_inf_mr_t::init_,
4355       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4356   status |= csound->AppendOpcode(
4357       csound, "la_k_norm_inf_mr", sizeof(la_k_norm_inf_mr_t), 0, 3, "k", "i",
4358       (int (*)(CSOUND *, void *)) & la_k_norm_inf_mr_t::init_,
4359       (int (*)(CSOUND *, void *)) & la_k_norm_inf_mr_t::kontrol_,
4360       (int (*)(CSOUND *, void *))0);
4361   status |= csound->AppendOpcode(
4362       csound, "la_i_norm_inf_mc", sizeof(la_i_norm_inf_mc_t), 0, 1, "i", "i",
4363       (int (*)(CSOUND *, void *)) & la_i_norm_inf_mc_t::init_,
4364       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4365   status |= csound->AppendOpcode(
4366       csound, "la_k_norm_inf_mc", sizeof(la_k_norm_inf_mc_t), 0, 3, "k", "i",
4367       (int (*)(CSOUND *, void *)) & la_k_norm_inf_mc_t::init_,
4368       (int (*)(CSOUND *, void *)) & la_k_norm_inf_mc_t::kontrol_,
4369       (int (*)(CSOUND *, void *))0);
4370   status |= csound->AppendOpcode(
4371       csound, "la_i_trace_mr", sizeof(la_i_trace_mr_t), 0, 1, "i", "i",
4372       (int (*)(CSOUND *, void *)) & la_i_trace_mr_t::init_,
4373       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4374   status |= csound->AppendOpcode(
4375       csound, "la_k_trace_mr", sizeof(la_k_trace_mr_t), 0, 3, "k", "i",
4376       (int (*)(CSOUND *, void *)) & la_k_trace_mr_t::init_,
4377       (int (*)(CSOUND *, void *)) & la_k_trace_mr_t::kontrol_,
4378       (int (*)(CSOUND *, void *))0);
4379   status |= csound->AppendOpcode(
4380       csound, "la_i_trace_mc", sizeof(la_i_trace_mc_t), 0, 1, "ii", "i",
4381       (int (*)(CSOUND *, void *)) & la_i_trace_mc_t::init_,
4382       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4383   status |= csound->AppendOpcode(
4384       csound, "la_k_trace_mc", sizeof(la_k_trace_mc_t), 0, 3, "kk", "i",
4385       (int (*)(CSOUND *, void *)) & la_k_trace_mc_t::init_,
4386       (int (*)(CSOUND *, void *)) & la_k_trace_mc_t::kontrol_,
4387       (int (*)(CSOUND *, void *))0);
4388   status |= csound->AppendOpcode(
4389       csound, "la_i_lu_det_mr", sizeof(la_i_lu_det_mr_t), 0, 1, "i", "i",
4390       (int (*)(CSOUND *, void *)) & la_i_lu_det_mr_t::init_,
4391       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4392   status |= csound->AppendOpcode(
4393       csound, "la_k_lu_det_mr", sizeof(la_k_lu_det_mr_t), 0, 3, "k", "i",
4394       (int (*)(CSOUND *, void *)) & la_k_lu_det_mr_t::init_,
4395       (int (*)(CSOUND *, void *)) & la_k_lu_det_mr_t::kontrol_,
4396       (int (*)(CSOUND *, void *))0);
4397   status |= csound->AppendOpcode(
4398       csound, "la_i_lu_det_mc", sizeof(la_i_lu_det_mc_t), 0, 1, "ii", "i",
4399       (int (*)(CSOUND *, void *)) & la_i_lu_det_mc_t::init_,
4400       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4401   status |= csound->AppendOpcode(
4402       csound, "la_k_lu_det_mc", sizeof(la_k_lu_det_mc_t), 0, 3, "kk", "i",
4403       (int (*)(CSOUND *, void *)) & la_k_lu_det_mc_t::init_,
4404       (int (*)(CSOUND *, void *)) & la_k_lu_det_mc_t::kontrol_,
4405       (int (*)(CSOUND *, void *))0);
4406   status |= csound->AppendOpcode(
4407       csound, "la_i_add_vr", sizeof(la_i_add_vr_t), 0, 1, "i", "ii",
4408       (int (*)(CSOUND *, void *)) & la_i_add_vr_t::init_,
4409       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4410   status |= csound->AppendOpcode(
4411       csound, "la_k_add_vr", sizeof(la_k_add_vr_t), 0, 3, "i", "ii",
4412       (int (*)(CSOUND *, void *)) & la_k_add_vr_t::init_,
4413       (int (*)(CSOUND *, void *)) & la_k_add_vr_t::kontrol_,
4414       (int (*)(CSOUND *, void *))0);
4415   status |= csound->AppendOpcode(
4416       csound, "la_i_add_vc", sizeof(la_i_add_vc_t), 0, 1, "i", "ii",
4417       (int (*)(CSOUND *, void *)) & la_i_add_vc_t::init_,
4418       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4419   status |= csound->AppendOpcode(
4420       csound, "la_k_add_vc", sizeof(la_k_add_vc_t), 0, 3, "i", "ii",
4421       (int (*)(CSOUND *, void *)) & la_k_add_vc_t::init_,
4422       (int (*)(CSOUND *, void *)) & la_k_add_vc_t::kontrol_,
4423       (int (*)(CSOUND *, void *))0);
4424   status |= csound->AppendOpcode(
4425       csound, "la_i_add_mr", sizeof(la_i_add_mr_t), 0, 1, "i", "ii",
4426       (int (*)(CSOUND *, void *)) & la_i_add_mr_t::init_,
4427       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4428   status |= csound->AppendOpcode(
4429       csound, "la_k_add_mr", sizeof(la_k_add_mr_t), 0, 3, "i", "ii",
4430       (int (*)(CSOUND *, void *)) & la_k_add_mr_t::init_,
4431       (int (*)(CSOUND *, void *)) & la_k_add_mr_t::kontrol_,
4432       (int (*)(CSOUND *, void *))0);
4433   status |= csound->AppendOpcode(
4434       csound, "la_i_add_mc", sizeof(la_i_add_mc_t), 0, 1, "i", "ii",
4435       (int (*)(CSOUND *, void *)) & la_i_add_mc_t::init_,
4436       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4437   status |= csound->AppendOpcode(
4438       csound, "la_k_add_mc", sizeof(la_k_add_mc_t), 0, 3, "i", "ii",
4439       (int (*)(CSOUND *, void *)) & la_k_add_mc_t::init_,
4440       (int (*)(CSOUND *, void *)) & la_k_add_mc_t::kontrol_,
4441       (int (*)(CSOUND *, void *))0);
4442   status |= csound->AppendOpcode(
4443       csound, "la_i_subtract_vr", sizeof(la_i_subtract_vr_t), 0, 1, "i", "ii",
4444       (int (*)(CSOUND *, void *)) & la_i_subtract_vr_t::init_,
4445       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4446   status |= csound->AppendOpcode(
4447       csound, "la_k_subtract_vr", sizeof(la_k_subtract_vr_t), 0, 3, "i", "ii",
4448       (int (*)(CSOUND *, void *)) & la_k_subtract_vr_t::init_,
4449       (int (*)(CSOUND *, void *)) & la_k_subtract_vr_t::kontrol_,
4450       (int (*)(CSOUND *, void *))0);
4451   status |= csound->AppendOpcode(
4452       csound, "la_i_subtract_vc", sizeof(la_i_subtract_vc_t), 0, 1, "i", "ii",
4453       (int (*)(CSOUND *, void *)) & la_i_subtract_vc_t::init_,
4454       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4455   status |= csound->AppendOpcode(
4456       csound, "la_k_subtract_vc", sizeof(la_k_subtract_vc_t), 0, 3, "i", "ii",
4457       (int (*)(CSOUND *, void *)) & la_k_subtract_vc_t::init_,
4458       (int (*)(CSOUND *, void *)) & la_k_subtract_vc_t::kontrol_,
4459       (int (*)(CSOUND *, void *))0);
4460   status |= csound->AppendOpcode(
4461       csound, "la_i_subtract_mr", sizeof(la_i_subtract_mr_t), 0, 1, "i", "ii",
4462       (int (*)(CSOUND *, void *)) & la_i_subtract_mr_t::init_,
4463       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4464   status |= csound->AppendOpcode(
4465       csound, "la_k_subtract_mr", sizeof(la_k_subtract_mr_t), 0, 3, "i", "ii",
4466       (int (*)(CSOUND *, void *)) & la_k_subtract_mr_t::init_,
4467       (int (*)(CSOUND *, void *)) & la_k_subtract_mr_t::kontrol_,
4468       (int (*)(CSOUND *, void *))0);
4469   status |= csound->AppendOpcode(
4470       csound, "la_i_subtract_mc", sizeof(la_i_subtract_mc_t), 0, 1, "i", "ii",
4471       (int (*)(CSOUND *, void *)) & la_i_subtract_mc_t::init_,
4472       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4473   status |= csound->AppendOpcode(
4474       csound, "la_k_subtract_mc", sizeof(la_k_subtract_mc_t), 0, 3, "i", "ii",
4475       (int (*)(CSOUND *, void *)) & la_k_subtract_mc_t::init_,
4476       (int (*)(CSOUND *, void *)) & la_k_subtract_mc_t::kontrol_,
4477       (int (*)(CSOUND *, void *))0);
4478   status |= csound->AppendOpcode(
4479       csound, "la_i_multiply_vr", sizeof(la_i_multiply_vr_t), 0, 1, "i", "ii",
4480       (int (*)(CSOUND *, void *)) & la_i_multiply_vr_t::init_,
4481       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4482   status |= csound->AppendOpcode(
4483       csound, "la_k_multiply_vr", sizeof(la_k_multiply_vr_t), 0, 3, "i", "ii",
4484       (int (*)(CSOUND *, void *)) & la_k_multiply_vr_t::init_,
4485       (int (*)(CSOUND *, void *)) & la_k_multiply_vr_t::kontrol_,
4486       (int (*)(CSOUND *, void *))0);
4487   status |= csound->AppendOpcode(
4488       csound, "la_i_multiply_vc", sizeof(la_i_multiply_vc_t), 0, 1, "i", "ii",
4489       (int (*)(CSOUND *, void *)) & la_i_multiply_vc_t::init_,
4490       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4491   status |= csound->AppendOpcode(
4492       csound, "la_k_multiply_vc", sizeof(la_k_multiply_vc_t), 0, 3, "i", "ii",
4493       (int (*)(CSOUND *, void *)) & la_k_multiply_vc_t::init_,
4494       (int (*)(CSOUND *, void *)) & la_k_multiply_vc_t::kontrol_,
4495       (int (*)(CSOUND *, void *))0);
4496   status |= csound->AppendOpcode(
4497       csound, "la_i_multiply_mr", sizeof(la_i_multiply_mr_t), 0, 1, "i", "ii",
4498       (int (*)(CSOUND *, void *)) & la_i_multiply_mr_t::init_,
4499       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4500   status |= csound->AppendOpcode(
4501       csound, "la_k_multiply_mr", sizeof(la_k_multiply_mr_t), 0, 3, "i", "ii",
4502       (int (*)(CSOUND *, void *)) & la_k_multiply_mr_t::init_,
4503       (int (*)(CSOUND *, void *)) & la_k_multiply_mr_t::kontrol_,
4504       (int (*)(CSOUND *, void *))0);
4505   status |= csound->AppendOpcode(
4506       csound, "la_i_multiply_mc", sizeof(la_i_multiply_mc_t), 0, 1, "i", "ii",
4507       (int (*)(CSOUND *, void *)) & la_i_multiply_mc_t::init_,
4508       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4509   status |= csound->AppendOpcode(
4510       csound, "la_k_multiply_mc", sizeof(la_k_multiply_mc_t), 0, 3, "i", "ii",
4511       (int (*)(CSOUND *, void *)) & la_k_multiply_mc_t::init_,
4512       (int (*)(CSOUND *, void *)) & la_k_multiply_mc_t::kontrol_,
4513       (int (*)(CSOUND *, void *))0);
4514 
4515   status |= csound->AppendOpcode(
4516       csound, "la_i_divide_vr", sizeof(la_i_divide_vr_t), 0, 1, "i", "ii",
4517       (int (*)(CSOUND *, void *)) & la_i_divide_vr_t::init_,
4518       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4519   status |= csound->AppendOpcode(
4520       csound, "la_k_divide_vr", sizeof(la_k_divide_vr_t), 0, 3, "i", "ii",
4521       (int (*)(CSOUND *, void *)) & la_k_divide_vr_t::init_,
4522       (int (*)(CSOUND *, void *)) & la_k_divide_vr_t::kontrol_,
4523       (int (*)(CSOUND *, void *))0);
4524   status |= csound->AppendOpcode(
4525       csound, "la_i_divide_vc", sizeof(la_i_divide_vc_t), 0, 1, "i", "ii",
4526       (int (*)(CSOUND *, void *)) & la_i_divide_vc_t::init_,
4527       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4528   status |= csound->AppendOpcode(
4529       csound, "la_k_divide_vc", sizeof(la_k_divide_vc_t), 0, 3, "i", "kk",
4530       (int (*)(CSOUND *, void *)) & la_k_divide_vc_t::init_,
4531       (int (*)(CSOUND *, void *)) & la_k_divide_vc_t::kontrol_,
4532       (int (*)(CSOUND *, void *))0);
4533   status |= csound->AppendOpcode(
4534       csound, "la_i_divide_mr", sizeof(la_i_divide_mr_t), 0, 1, "i", "ii",
4535       (int (*)(CSOUND *, void *)) & la_i_divide_mr_t::init_,
4536       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4537   status |= csound->AppendOpcode(
4538       csound, "la_k_divide_mr", sizeof(la_k_divide_mr_t), 0, 3, "i", "ii",
4539       (int (*)(CSOUND *, void *)) & la_k_divide_mr_t::init_,
4540       (int (*)(CSOUND *, void *)) & la_k_divide_mr_t::kontrol_,
4541       (int (*)(CSOUND *, void *))0);
4542   status |= csound->AppendOpcode(
4543       csound, "la_i_divide_mc", sizeof(la_i_divide_mc_t), 0, 1, "i", "ii",
4544       (int (*)(CSOUND *, void *)) & la_i_divide_mc_t::init_,
4545       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4546   status |= csound->AppendOpcode(
4547       csound, "la_k_divide_mc", sizeof(la_k_divide_mc_t), 0, 3, "i", "ii",
4548       (int (*)(CSOUND *, void *)) & la_k_divide_mc_t::init_,
4549       (int (*)(CSOUND *, void *)) & la_k_divide_mc_t::kontrol_,
4550       (int (*)(CSOUND *, void *))0);
4551   status |= csound->AppendOpcode(
4552       csound, "la_i_dot_vr", sizeof(la_i_dot_vr_t), 0, 1, "i", "ii",
4553       (int (*)(CSOUND *, void *)) & la_i_dot_vr_t::init_,
4554       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4555   status |= csound->AppendOpcode(
4556       csound, "la_k_dot_vr", sizeof(la_k_dot_vr_t), 0, 3, "i", "ii",
4557       (int (*)(CSOUND *, void *)) & la_k_dot_vr_t::init_,
4558       (int (*)(CSOUND *, void *)) & la_k_dot_vr_t::kontrol_,
4559       (int (*)(CSOUND *, void *))0);
4560   status |= csound->AppendOpcode(
4561       csound, "la_i_dot_vc", sizeof(la_i_dot_vc_t), 0, 1, "ii", "ii",
4562       (int (*)(CSOUND *, void *)) & la_i_dot_vc_t::init_,
4563       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4564   status |= csound->AppendOpcode(
4565       csound, "la_k_dot_vc", sizeof(la_k_dot_vc_t), 0, 3, "ii", "ii",
4566       (int (*)(CSOUND *, void *)) & la_k_dot_vc_t::init_,
4567       (int (*)(CSOUND *, void *)) & la_k_dot_vc_t::kontrol_,
4568       (int (*)(CSOUND *, void *))0);
4569   status |= csound->AppendOpcode(
4570       csound, "la_i_dot_mr", sizeof(la_i_dot_mr_t), 0, 1, "i", "ii",
4571       (int (*)(CSOUND *, void *)) & la_i_dot_mr_t::init_,
4572       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4573   status |= csound->AppendOpcode(
4574       csound, "la_k_dot_mr", sizeof(la_k_dot_mr_t), 0, 3, "i", "ii",
4575       (int (*)(CSOUND *, void *)) & la_k_dot_mr_t::init_,
4576       (int (*)(CSOUND *, void *)) & la_k_dot_mr_t::kontrol_,
4577       (int (*)(CSOUND *, void *))0);
4578   status |= csound->AppendOpcode(
4579       csound, "la_i_dot_mc", sizeof(la_i_dot_mc_t), 0, 1, "i", "ii",
4580       (int (*)(CSOUND *, void *)) & la_i_dot_mc_t::init_,
4581       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4582   status |= csound->AppendOpcode(
4583       csound, "la_k_dot_mc", sizeof(la_k_dot_mc_t), 0, 3, "i", "ii",
4584       (int (*)(CSOUND *, void *)) & la_k_dot_mc_t::init_,
4585       (int (*)(CSOUND *, void *)) & la_k_dot_mc_t::kontrol_,
4586       (int (*)(CSOUND *, void *))0);
4587   status |= csound->AppendOpcode(
4588       csound, "la_i_dot_mr_vr", sizeof(la_i_dot_mr_vr_t), 0, 1, "i", "ii",
4589       (int (*)(CSOUND *, void *)) & la_i_dot_mr_vr_t::init_,
4590       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4591   status |= csound->AppendOpcode(
4592       csound, "la_k_dot_mr_vr", sizeof(la_k_dot_mr_vr_t), 0, 3, "i", "ii",
4593       (int (*)(CSOUND *, void *)) & la_k_dot_mr_vr_t::init_,
4594       (int (*)(CSOUND *, void *)) & la_k_dot_mr_vr_t::kontrol_,
4595       (int (*)(CSOUND *, void *))0);
4596   status |= csound->AppendOpcode(
4597       csound, "la_i_dot_mc_vc", sizeof(la_i_dot_mc_vc_t), 0, 1, "i", "ii",
4598       (int (*)(CSOUND *, void *)) & la_i_dot_mc_vc_t::init_,
4599       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4600   status |= csound->AppendOpcode(
4601       csound, "la_k_dot_mc_vc", sizeof(la_k_dot_mc_vc_t), 0, 3, "i", "ii",
4602       (int (*)(CSOUND *, void *)) & la_k_dot_mc_vc_t::init_,
4603       (int (*)(CSOUND *, void *)) & la_k_dot_mc_vc_t::kontrol_,
4604       (int (*)(CSOUND *, void *))0);
4605   status |= csound->AppendOpcode(
4606       csound, "la_i_invert_mr", sizeof(la_i_invert_mr_t), 0, 1, "ii", "i",
4607       (int (*)(CSOUND *, void *)) & la_i_invert_mr_t::init_,
4608       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4609   status |= csound->AppendOpcode(
4610       csound, "la_k_invert_mr", sizeof(la_k_invert_mr_t), 0, 3, "ik", "i",
4611       (int (*)(CSOUND *, void *)) & la_k_invert_mr_t::init_,
4612       (int (*)(CSOUND *, void *)) & la_k_invert_mr_t::kontrol_,
4613       (int (*)(CSOUND *, void *))0);
4614   status |= csound->AppendOpcode(
4615       csound, "la_i_invert_mc", sizeof(la_i_invert_mc_t), 0, 1, "iii", "i",
4616       (int (*)(CSOUND *, void *)) & la_i_invert_mc_t::init_,
4617       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4618   status |= csound->AppendOpcode(
4619       csound, "la_k_invert_mc", sizeof(la_k_invert_mc_t), 0, 3, "ikk", "i",
4620       (int (*)(CSOUND *, void *)) & la_k_invert_mc_t::init_,
4621       (int (*)(CSOUND *, void *)) & la_k_invert_mc_t::kontrol_,
4622       (int (*)(CSOUND *, void *))0);
4623   status |= csound->AppendOpcode(
4624       csound, "la_i_upper_solve_mr", sizeof(la_i_upper_solve_mr_t), 0, 1, "i",
4625       "io", (int (*)(CSOUND *, void *)) & la_i_upper_solve_mr_t::init_,
4626       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4627   status |= csound->AppendOpcode(
4628       csound, "la_k_upper_solve_mr", sizeof(la_k_upper_solve_mr_t), 0, 3, "i",
4629       "iO", (int (*)(CSOUND *, void *)) & la_k_upper_solve_mr_t::init_,
4630       (int (*)(CSOUND *, void *)) & la_k_upper_solve_mr_t::kontrol_,
4631       (int (*)(CSOUND *, void *))0);
4632   status |= csound->AppendOpcode(
4633       csound, "la_i_upper_solve_mc", sizeof(la_i_upper_solve_mc_t), 0, 1, "i",
4634       "io", (int (*)(CSOUND *, void *)) & la_i_upper_solve_mc_t::init_,
4635       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4636   status |= csound->AppendOpcode(
4637       csound, "la_k_upper_solve_mc", sizeof(la_k_upper_solve_mc_t), 0, 3, "i",
4638       "iO", (int (*)(CSOUND *, void *)) & la_k_upper_solve_mc_t::init_,
4639       (int (*)(CSOUND *, void *)) & la_k_upper_solve_mc_t::kontrol_,
4640       (int (*)(CSOUND *, void *))0);
4641   status |= csound->AppendOpcode(
4642       csound, "la_i_lower_solve_mr", sizeof(la_i_lower_solve_mr_t), 0, 1, "i",
4643       "io", (int (*)(CSOUND *, void *)) & la_i_lower_solve_mr_t::init_,
4644       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4645   status |= csound->AppendOpcode(
4646       csound, "la_k_lower_solve_mr", sizeof(la_k_lower_solve_mr_t), 0, 3, "i",
4647       "iO", (int (*)(CSOUND *, void *)) & la_k_lower_solve_mr_t::init_,
4648       (int (*)(CSOUND *, void *)) & la_k_lower_solve_mr_t::kontrol_,
4649       (int (*)(CSOUND *, void *))0);
4650   status |= csound->AppendOpcode(
4651       csound, "la_i_lower_solve_mc", sizeof(la_i_lower_solve_mc_t), 0, 1, "i",
4652       "io", (int (*)(CSOUND *, void *)) & la_i_lower_solve_mc_t::init_,
4653       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4654   status |= csound->AppendOpcode(
4655       csound, "la_k_lower_solve_mc", sizeof(la_k_lower_solve_mc_t), 0, 3, "i",
4656       "iO", (int (*)(CSOUND *, void *)) & la_k_lower_solve_mc_t::init_,
4657       (int (*)(CSOUND *, void *)) & la_k_lower_solve_mc_t::kontrol_,
4658       (int (*)(CSOUND *, void *))0);
4659   status |= csound->AppendOpcode(
4660       csound, "la_i_lu_factor_mr", sizeof(la_i_lu_factor_mr_t), 0, 1, "iii",
4661       "i", (int (*)(CSOUND *, void *)) & la_i_lu_factor_mr_t::init_,
4662       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4663   status |= csound->AppendOpcode(
4664       csound, "la_k_lu_factor_mr", sizeof(la_k_lu_factor_mr_t), 0, 3, "iik",
4665       "i", (int (*)(CSOUND *, void *)) & la_k_lu_factor_mr_t::init_,
4666       (int (*)(CSOUND *, void *)) & la_k_lu_factor_mr_t::kontrol_,
4667       (int (*)(CSOUND *, void *))0);
4668   status |= csound->AppendOpcode(
4669       csound, "la_i_lu_factor_mc", sizeof(la_i_lu_factor_mc_t), 0, 1, "iii",
4670       "i", (int (*)(CSOUND *, void *)) & la_i_lu_factor_mc_t::init_,
4671       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4672   status |= csound->AppendOpcode(
4673       csound, "la_k_lu_factor_mc", sizeof(la_k_lu_factor_mc_t), 0, 3, "i", "i",
4674       (int (*)(CSOUND *, void *)) & la_k_lu_factor_mc_t::init_,
4675       (int (*)(CSOUND *, void *)) & la_k_lu_factor_mc_t::kontrol_,
4676       (int (*)(CSOUND *, void *))0);
4677   status |= csound->AppendOpcode(
4678       csound, "la_i_lu_solve_mr", sizeof(la_i_lu_solve_mr_t), 0, 1, "i", "ii",
4679       (int (*)(CSOUND *, void *)) & la_i_lu_solve_mr_t::init_,
4680       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4681   status |= csound->AppendOpcode(
4682       csound, "la_k_lu_solve_mr", sizeof(la_k_lu_solve_mr_t), 0, 3, "i", "ii",
4683       (int (*)(CSOUND *, void *)) & la_k_lu_solve_mr_t::init_,
4684       (int (*)(CSOUND *, void *)) & la_k_lu_solve_mr_t::kontrol_,
4685       (int (*)(CSOUND *, void *))0);
4686   status |= csound->AppendOpcode(
4687       csound, "la_i_lu_solve_mc", sizeof(la_i_lu_solve_mc_t), 0, 1, "i", "ii",
4688       (int (*)(CSOUND *, void *)) & la_i_lu_solve_mc_t::init_,
4689       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4690   status |= csound->AppendOpcode(
4691       csound, "la_k_lu_solve_mc", sizeof(la_k_lu_solve_mc_t), 0, 3, "i", "ii",
4692       (int (*)(CSOUND *, void *)) & la_k_lu_solve_mc_t::init_,
4693       (int (*)(CSOUND *, void *)) & la_k_lu_solve_mc_t::kontrol_,
4694       (int (*)(CSOUND *, void *))0);
4695   status |= csound->AppendOpcode(
4696       csound, "la_i_qr_factor_mr", sizeof(la_i_qr_factor_mr_t), 0, 1, "ii", "i",
4697       (int (*)(CSOUND *, void *)) & la_i_qr_factor_mr_t::init_,
4698       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4699   status |= csound->AppendOpcode(
4700       csound, "la_k_qr_factor_mr", sizeof(la_k_qr_factor_mr_t), 0, 3, "ii", "i",
4701       (int (*)(CSOUND *, void *)) & la_k_qr_factor_mr_t::init_,
4702       (int (*)(CSOUND *, void *)) & la_k_qr_factor_mr_t::kontrol_,
4703       (int (*)(CSOUND *, void *))0);
4704   status |= csound->AppendOpcode(
4705       csound, "la_i_qr_factor_mc", sizeof(la_i_qr_factor_mc_t), 0, 1, "ii", "i",
4706       (int (*)(CSOUND *, void *)) & la_i_qr_factor_mc_t::init_,
4707       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4708   status |= csound->AppendOpcode(
4709       csound, "la_k_qr_factor_mc", sizeof(la_k_qr_factor_mc_t), 0, 3, "ii", "i",
4710       (int (*)(CSOUND *, void *)) & la_k_qr_factor_mc_t::init_,
4711       (int (*)(CSOUND *, void *)) & la_k_qr_factor_mc_t::kontrol_,
4712       (int (*)(CSOUND *, void *))0);
4713   status |= csound->AppendOpcode(
4714       csound, "la_i_qr_eigen_mr", sizeof(la_i_qr_eigen_mr_t), 0, 1, "i", "ii",
4715       (int (*)(CSOUND *, void *)) & la_i_qr_eigen_mr_t::init_,
4716       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4717   status |= csound->AppendOpcode(
4718       csound, "la_k_qr_eigen_mr", sizeof(la_k_qr_eigen_mr_t), 0, 3, "i", "ik",
4719       (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mr_t::init_,
4720       (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mr_t::kontrol_,
4721       (int (*)(CSOUND *, void *))0);
4722   status |= csound->AppendOpcode(
4723       csound, "la_i_qr_eigen_mc", sizeof(la_i_qr_eigen_mc_t), 0, 1, "i", "ii",
4724       (int (*)(CSOUND *, void *)) & la_i_qr_eigen_mc_t::init_,
4725       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4726   status |= csound->AppendOpcode(
4727       csound, "la_k_qr_eigen_mc", sizeof(la_k_qr_eigen_mc_t), 0, 3, "i", "ik",
4728       (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mc_t::init_,
4729       (int (*)(CSOUND *, void *)) & la_k_qr_eigen_mc_t::kontrol_,
4730       (int (*)(CSOUND *, void *))0);
4731   status |= csound->AppendOpcode(
4732       csound, "la_i_qr_sym_eigen_mr", sizeof(la_i_qr_sym_eigen_mr_t), 0, 1,
4733       "ii", "ii", (int (*)(CSOUND *, void *)) & la_i_qr_sym_eigen_mr_t::init_,
4734       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4735   status |= csound->AppendOpcode(
4736       csound, "la_k_qr_sym_eigen_mr", sizeof(la_k_qr_sym_eigen_mr_t), 0, 3,
4737       "ii", "ik", (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mr_t::init_,
4738       (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mr_t::kontrol_,
4739       (int (*)(CSOUND *, void *))0);
4740   status |= csound->AppendOpcode(
4741       csound, "la_i_qr_sym_eigen_mc", sizeof(la_i_qr_sym_eigen_mc_t), 0, 1,
4742       "ii", "ii", (int (*)(CSOUND *, void *)) & la_i_qr_sym_eigen_mc_t::init_,
4743       (int (*)(CSOUND *, void *))0, (int (*)(CSOUND *, void *))0);
4744   status |= csound->AppendOpcode(
4745       csound, "la_k_qr_sym_eigen_mc", sizeof(la_k_qr_sym_eigen_mc_t), 0, 3,
4746       "ii", "ik", (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mc_t::init_,
4747       (int (*)(CSOUND *, void *)) & la_k_qr_sym_eigen_mc_t::kontrol_,
4748       (int (*)(CSOUND *, void *))0);
4749   return status;
4750 }
4751 
csoundModuleDestroy(CSOUND * csound)4752 PUBLIC int csoundModuleDestroy(CSOUND *csound) { return 0; }
4753 }
4754