1 /* ----------------------------------------------------------------------
2 * Project: CMSIS DSP Python Wrapper
3 * Title: cmsismodule.h
4 * Description: C code for the CMSIS-DSP Python wrapper
5 *
6 * $Date: 27 April 2021
7 * $Revision: V1.0
8 *
9 * Target Processor: Cortex-M cores
10 * -------------------------------------------------------------------- */
11 /*
12 * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
13 *
14 * SPDX-License-Identifier: Apache-2.0
15 *
16 * Licensed under the Apache License, Version 2.0 (the License); you may
17 * not use this file except in compliance with the License.
18 * You may obtain a copy of the License at
19 *
20 * www.apache.org/licenses/LICENSE-2.0
21 *
22 * Unless required by applicable law or agreed to in writing, software
23 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
24 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 * See the License for the specific language governing permissions and
26 * limitations under the License.
27 */
28
29 #define MODNAME "cmsisdsp_matrix"
30 #define MODINITNAME cmsisdsp_matrix
31
32 #include "cmsisdsp_module.h"
33
34 MATRIXFROMNUMPY(f32,float32_t,double,NPY_DOUBLE);
35 MATRIXFROMNUMPY(f64,float64_t,double,NPY_DOUBLE);
36 MATRIXFROMNUMPY(q31,q31_t,int32_t,NPY_INT32);
37 MATRIXFROMNUMPY(q15,q15_t,int16_t,NPY_INT16);
38 MATRIXFROMNUMPY(q7,q7_t,int8_t,NPY_BYTE);
39
40 CREATEMATRIX(f32,float32_t);
41 CREATEMATRIX(f64,float64_t);
42 CREATEMATRIX(q31,q31_t);
43 CREATEMATRIX(q15,q15_t);
44 CREATEMATRIX(q7,q7_t);
45
46 NUMPYVECTORFROMBUFFER(f32,float32_t,NPY_FLOAT);
47
48 NUMPYARRAYFROMMATRIX(f32,NPY_FLOAT);
49 NUMPYARRAYFROMMATRIX(f64,NPY_DOUBLE);
50 NUMPYARRAYFROMMATRIX(q31,NPY_INT32);
51 NUMPYARRAYFROMMATRIX(q15,NPY_INT16);
52 NUMPYARRAYFROMMATRIX(q7,NPY_BYTE);
53
54
55
56
57
58
59
60
61
62 typedef struct {
63 PyObject_HEAD
64 arm_matrix_instance_f32 *instance;
65 } dsp_arm_matrix_instance_f32Object;
66
67
68 static void
arm_matrix_instance_f32_dealloc(dsp_arm_matrix_instance_f32Object * self)69 arm_matrix_instance_f32_dealloc(dsp_arm_matrix_instance_f32Object* self)
70 {
71 //printf("Dealloc called\n");
72 if (self->instance)
73 {
74
75
76 if (self->instance->pData)
77 {
78 PyMem_Free(self->instance->pData);
79 }
80
81
82 PyMem_Free(self->instance);
83 }
84
85 Py_TYPE(self)->tp_free((PyObject*)self);
86 }
87
88
89 static PyObject *
arm_matrix_instance_f32_new(PyTypeObject * type,PyObject * args,PyObject * kwds)90 arm_matrix_instance_f32_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
91 {
92 dsp_arm_matrix_instance_f32Object *self;
93 //printf("New called\n");
94
95 self = (dsp_arm_matrix_instance_f32Object *)type->tp_alloc(type, 0);
96 //printf("alloc called\n");
97
98 if (self != NULL) {
99
100 self->instance = PyMem_Malloc(sizeof(arm_matrix_instance_f32));
101
102 self->instance->pData = NULL;
103
104 }
105
106
107 return (PyObject *)self;
108 }
109
110 static int
arm_matrix_instance_f32_init(dsp_arm_matrix_instance_f32Object * self,PyObject * args,PyObject * kwds)111 arm_matrix_instance_f32_init(dsp_arm_matrix_instance_f32Object *self, PyObject *args, PyObject *kwds)
112 {
113
114 PyObject *pData=NULL;
115 char *kwlist[] = {
116 "numRows","numCols","pData",NULL
117 };
118
119 if (PyArg_ParseTupleAndKeywords(args, kwds, "|hhO", kwlist,&self->instance->numRows
120 ,&self->instance->numCols
121 ,&pData
122 ))
123 {
124
125 INITARRAYFIELD(pData,NPY_DOUBLE,double,float32_t);
126
127 }
128 return 0;
129 }
130
131 GETFIELD(arm_matrix_instance_f32,numRows,"h");
132 GETFIELD(arm_matrix_instance_f32,numCols,"h");
133
134
135 static PyMethodDef arm_matrix_instance_f32_methods[] = {
136
137 {"numRows", (PyCFunction) Method_arm_matrix_instance_f32_numRows,METH_NOARGS,"numRows"},
138 {"numCols", (PyCFunction) Method_arm_matrix_instance_f32_numCols,METH_NOARGS,"numCols"},
139
140 {NULL} /* Sentinel */
141 };
142
143
144 DSPType(arm_matrix_instance_f32,arm_matrix_instance_f32_new,arm_matrix_instance_f32_dealloc,arm_matrix_instance_f32_init,arm_matrix_instance_f32_methods);
145
146
147 typedef struct {
148 PyObject_HEAD
149 arm_matrix_instance_f64 *instance;
150 } dsp_arm_matrix_instance_f64Object;
151
152
153 static void
arm_matrix_instance_f64_dealloc(dsp_arm_matrix_instance_f64Object * self)154 arm_matrix_instance_f64_dealloc(dsp_arm_matrix_instance_f64Object* self)
155 {
156 //printf("Dealloc called\n");
157 if (self->instance)
158 {
159
160
161 if (self->instance->pData)
162 {
163 PyMem_Free(self->instance->pData);
164 }
165
166
167 PyMem_Free(self->instance);
168 }
169
170 Py_TYPE(self)->tp_free((PyObject*)self);
171 }
172
173
174 static PyObject *
arm_matrix_instance_f64_new(PyTypeObject * type,PyObject * args,PyObject * kwds)175 arm_matrix_instance_f64_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
176 {
177 dsp_arm_matrix_instance_f64Object *self;
178 //printf("New called\n");
179
180 self = (dsp_arm_matrix_instance_f64Object *)type->tp_alloc(type, 0);
181 //printf("alloc called\n");
182
183 if (self != NULL) {
184
185 self->instance = PyMem_Malloc(sizeof(arm_matrix_instance_f64));
186
187 self->instance->pData = NULL;
188
189 }
190
191
192 return (PyObject *)self;
193 }
194
195 static int
arm_matrix_instance_f64_init(dsp_arm_matrix_instance_f64Object * self,PyObject * args,PyObject * kwds)196 arm_matrix_instance_f64_init(dsp_arm_matrix_instance_f64Object *self, PyObject *args, PyObject *kwds)
197 {
198
199 PyObject *pData=NULL;
200 char *kwlist[] = {
201 "numRows","numCols","pData",NULL
202 };
203
204 if (PyArg_ParseTupleAndKeywords(args, kwds, "|hhO", kwlist,&self->instance->numRows
205 ,&self->instance->numCols
206 ,&pData
207 ))
208 {
209
210 INITARRAYFIELD(pData,NPY_FLOAT64,float64_t,float64_t);
211
212 }
213 return 0;
214 }
215
216 GETFIELD(arm_matrix_instance_f64,numRows,"h");
217 GETFIELD(arm_matrix_instance_f64,numCols,"h");
218
219
220 static PyMethodDef arm_matrix_instance_f64_methods[] = {
221
222 {"numRows", (PyCFunction) Method_arm_matrix_instance_f64_numRows,METH_NOARGS,"numRows"},
223 {"numCols", (PyCFunction) Method_arm_matrix_instance_f64_numCols,METH_NOARGS,"numCols"},
224
225 {NULL} /* Sentinel */
226 };
227
228
229 DSPType(arm_matrix_instance_f64,arm_matrix_instance_f64_new,arm_matrix_instance_f64_dealloc,arm_matrix_instance_f64_init,arm_matrix_instance_f64_methods);
230
231
232 typedef struct {
233 PyObject_HEAD
234 arm_matrix_instance_q15 *instance;
235 } dsp_arm_matrix_instance_q15Object;
236
237
238 static void
arm_matrix_instance_q15_dealloc(dsp_arm_matrix_instance_q15Object * self)239 arm_matrix_instance_q15_dealloc(dsp_arm_matrix_instance_q15Object* self)
240 {
241 //printf("Dealloc called\n");
242 if (self->instance)
243 {
244
245
246 if (self->instance->pData)
247 {
248 PyMem_Free(self->instance->pData);
249 }
250
251
252 PyMem_Free(self->instance);
253 }
254
255 Py_TYPE(self)->tp_free((PyObject*)self);
256 }
257
258
259 static PyObject *
arm_matrix_instance_q15_new(PyTypeObject * type,PyObject * args,PyObject * kwds)260 arm_matrix_instance_q15_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
261 {
262 dsp_arm_matrix_instance_q15Object *self;
263 //printf("New called\n");
264
265 self = (dsp_arm_matrix_instance_q15Object *)type->tp_alloc(type, 0);
266 //printf("alloc called\n");
267
268 if (self != NULL) {
269
270 self->instance = PyMem_Malloc(sizeof(arm_matrix_instance_q15));
271
272 self->instance->pData = NULL;
273
274 }
275
276
277 return (PyObject *)self;
278 }
279
280 static int
arm_matrix_instance_q15_init(dsp_arm_matrix_instance_q15Object * self,PyObject * args,PyObject * kwds)281 arm_matrix_instance_q15_init(dsp_arm_matrix_instance_q15Object *self, PyObject *args, PyObject *kwds)
282 {
283
284 PyObject *pData=NULL;
285 char *kwlist[] = {
286 "numRows","numCols","pData",NULL
287 };
288
289 if (PyArg_ParseTupleAndKeywords(args, kwds, "|hhO", kwlist,&self->instance->numRows
290 ,&self->instance->numCols
291 ,&pData
292 ))
293 {
294
295 INITARRAYFIELD(pData,NPY_INT16,int16_t,int16_t);
296
297 }
298 return 0;
299 }
300
301 GETFIELD(arm_matrix_instance_q15,numRows,"h");
302 GETFIELD(arm_matrix_instance_q15,numCols,"h");
303
304
305 static PyMethodDef arm_matrix_instance_q15_methods[] = {
306
307 {"numRows", (PyCFunction) Method_arm_matrix_instance_q15_numRows,METH_NOARGS,"numRows"},
308 {"numCols", (PyCFunction) Method_arm_matrix_instance_q15_numCols,METH_NOARGS,"numCols"},
309
310 {NULL} /* Sentinel */
311 };
312
313
314 DSPType(arm_matrix_instance_q15,arm_matrix_instance_q15_new,arm_matrix_instance_q15_dealloc,arm_matrix_instance_q15_init,arm_matrix_instance_q15_methods);
315
316
317 typedef struct {
318 PyObject_HEAD
319 arm_matrix_instance_q31 *instance;
320 } dsp_arm_matrix_instance_q31Object;
321
322
323 static void
arm_matrix_instance_q31_dealloc(dsp_arm_matrix_instance_q31Object * self)324 arm_matrix_instance_q31_dealloc(dsp_arm_matrix_instance_q31Object* self)
325 {
326 //printf("Dealloc called\n");
327 if (self->instance)
328 {
329
330
331 if (self->instance->pData)
332 {
333 PyMem_Free(self->instance->pData);
334 }
335
336
337 PyMem_Free(self->instance);
338 }
339
340 Py_TYPE(self)->tp_free((PyObject*)self);
341 }
342
343
344 static PyObject *
arm_matrix_instance_q31_new(PyTypeObject * type,PyObject * args,PyObject * kwds)345 arm_matrix_instance_q31_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
346 {
347 dsp_arm_matrix_instance_q31Object *self;
348 //printf("New called\n");
349
350 self = (dsp_arm_matrix_instance_q31Object *)type->tp_alloc(type, 0);
351 //printf("alloc called\n");
352
353 if (self != NULL) {
354
355 self->instance = PyMem_Malloc(sizeof(arm_matrix_instance_q31));
356
357 self->instance->pData = NULL;
358
359 }
360
361
362 return (PyObject *)self;
363 }
364
365 static int
arm_matrix_instance_q31_init(dsp_arm_matrix_instance_q31Object * self,PyObject * args,PyObject * kwds)366 arm_matrix_instance_q31_init(dsp_arm_matrix_instance_q31Object *self, PyObject *args, PyObject *kwds)
367 {
368
369 PyObject *pData=NULL;
370 char *kwlist[] = {
371 "numRows","numCols","pData",NULL
372 };
373
374 if (PyArg_ParseTupleAndKeywords(args, kwds, "|hhO", kwlist,&self->instance->numRows
375 ,&self->instance->numCols
376 ,&pData
377 ))
378 {
379
380 INITARRAYFIELD(pData,NPY_INT32,int32_t,int32_t);
381
382 }
383 return 0;
384 }
385
386 GETFIELD(arm_matrix_instance_q31,numRows,"h");
387 GETFIELD(arm_matrix_instance_q31,numCols,"h");
388
389
390 static PyMethodDef arm_matrix_instance_q31_methods[] = {
391
392 {"numRows", (PyCFunction) Method_arm_matrix_instance_q31_numRows,METH_NOARGS,"numRows"},
393 {"numCols", (PyCFunction) Method_arm_matrix_instance_q31_numCols,METH_NOARGS,"numCols"},
394
395 {NULL} /* Sentinel */
396 };
397
398
399 DSPType(arm_matrix_instance_q31,arm_matrix_instance_q31_new,arm_matrix_instance_q31_dealloc,arm_matrix_instance_q31_init,arm_matrix_instance_q31_methods);
400
401
402
403
typeRegistration(PyObject * module)404 void typeRegistration(PyObject *module) {
405
406
407 ADDTYPE(arm_matrix_instance_f32);
408 ADDTYPE(arm_matrix_instance_f64);
409 ADDTYPE(arm_matrix_instance_q15);
410 ADDTYPE(arm_matrix_instance_q31);
411
412
413 }
414
415
416
417
418
419
420 static PyObject *
cmsis_arm_mat_add_f32(PyObject * obj,PyObject * args)421 cmsis_arm_mat_add_f32(PyObject *obj, PyObject *args)
422 {
423
424 PyObject *pSrcA=NULL; // input
425 arm_matrix_instance_f32 pSrcA_converted; // input
426 PyObject *pSrcB=NULL; // input
427 arm_matrix_instance_f32 pSrcB_converted; // input
428
429 arm_matrix_instance_f32 pDst_converted;
430
431 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
432 {
433
434 f32MatrixFromNumpy(&pSrcA_converted,pSrcA);
435 f32MatrixFromNumpy(&pSrcB_converted,pSrcB);
436 uint32_t row = pSrcA_converted.numRows ;
437 uint32_t column = pSrcB_converted.numCols ;
438 createf32Matrix(&pDst_converted,row,column);
439
440 arm_status returnValue = arm_mat_add_f32(&pSrcA_converted,&pSrcB_converted,&pDst_converted);
441 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
442 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
443
444 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
445
446 Py_DECREF(theReturnOBJ);
447 FREEMATRIX(&pSrcA_converted);
448 FREEMATRIX(&pSrcB_converted);
449 Py_DECREF(pDstOBJ);
450 return(pythonResult);
451
452 }
453 Py_RETURN_NONE;
454 }
455
456
457 static PyObject *
cmsis_arm_mat_add_q15(PyObject * obj,PyObject * args)458 cmsis_arm_mat_add_q15(PyObject *obj, PyObject *args)
459 {
460
461 PyObject *pSrcA=NULL; // input
462 arm_matrix_instance_q15 pSrcA_converted; // input
463 PyObject *pSrcB=NULL; // input
464 arm_matrix_instance_q15 pSrcB_converted; // input
465
466 arm_matrix_instance_q15 pDst_converted;
467
468 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
469 {
470
471 q15MatrixFromNumpy(&pSrcA_converted,pSrcA);
472 q15MatrixFromNumpy(&pSrcB_converted,pSrcB);
473 uint32_t row = pSrcA_converted.numRows ;
474 uint32_t column = pSrcB_converted.numCols ;
475 createq15Matrix(&pDst_converted,row,column);
476
477 arm_status returnValue = arm_mat_add_q15(&pSrcA_converted,
478 &pSrcB_converted,
479 &pDst_converted);
480 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
481 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
482
483 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
484
485 Py_DECREF(theReturnOBJ);
486 FREEMATRIX(&pSrcA_converted);
487 FREEMATRIX(&pSrcB_converted);
488 Py_DECREF(pDstOBJ);
489 return(pythonResult);
490
491 }
492 Py_RETURN_NONE;
493 }
494
495
496 static PyObject *
cmsis_arm_mat_add_q31(PyObject * obj,PyObject * args)497 cmsis_arm_mat_add_q31(PyObject *obj, PyObject *args)
498 {
499
500 PyObject *pSrcA=NULL; // input
501 arm_matrix_instance_q31 pSrcA_converted; // input
502 PyObject *pSrcB=NULL; // input
503 arm_matrix_instance_q31 pSrcB_converted; // input
504
505 arm_matrix_instance_q31 pDst_converted;
506
507 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
508 {
509
510 q31MatrixFromNumpy(&pSrcA_converted,pSrcA);
511 q31MatrixFromNumpy(&pSrcB_converted,pSrcB);
512 uint32_t row = pSrcA_converted.numRows ;
513 uint32_t column = pSrcB_converted.numCols ;
514 createq31Matrix(&pDst_converted,row,column);
515
516 arm_status returnValue = arm_mat_add_q31(&pSrcA_converted,
517 &pSrcB_converted,
518 &pDst_converted);
519 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
520 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
521
522 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
523
524 Py_DECREF(theReturnOBJ);
525 FREEMATRIX(&pSrcA_converted);
526 FREEMATRIX(&pSrcB_converted);
527 Py_DECREF(pDstOBJ);
528 return(pythonResult);
529
530 }
531 Py_RETURN_NONE;
532 }
533
534 static PyObject *
cmsis_arm_mat_cmplx_trans_f32(PyObject * obj,PyObject * args)535 cmsis_arm_mat_cmplx_trans_f32(PyObject *obj, PyObject *args)
536 {
537
538 PyObject *pSrc=NULL; // input
539 arm_matrix_instance_f32 pSrc_converted; // input
540 arm_matrix_instance_f32 pDst_converted;
541
542 if (PyArg_ParseTuple(args,"O",&pSrc))
543 {
544
545 f32MatrixFromNumpy(&pSrc_converted,pSrc);
546 pSrc_converted.numCols = pSrc_converted.numCols / 2;
547
548 uint32_t row = pSrc_converted.numCols ;
549 uint32_t column = pSrc_converted.numRows*2 ;
550 createf32Matrix(&pDst_converted,row,column);
551 /*
552 Dimensions in matrix instance are not correct but they are not used
553 by CMSIS-DSP since the library is not compiled with ARM_MATRIX_CHECK.
554 So only source dimensions are used for the computation.
555
556 The dimensions are correct for createf32Matrix since we need to create
557 a bigger buffer and createf32Matrix only knows real.
558
559 */
560
561 arm_status returnValue = arm_mat_cmplx_trans_f32(&pSrc_converted,&pDst_converted);
562 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
563 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
564
565 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
566
567 Py_DECREF(theReturnOBJ);
568 FREEMATRIX(&pSrc_converted);
569 Py_DECREF(pDstOBJ);
570 return(pythonResult);
571
572 }
573 Py_RETURN_NONE;
574 }
575
576 static PyObject *
cmsis_arm_mat_cmplx_trans_q31(PyObject * obj,PyObject * args)577 cmsis_arm_mat_cmplx_trans_q31(PyObject *obj, PyObject *args)
578 {
579
580 PyObject *pSrc=NULL; // input
581 arm_matrix_instance_q31 pSrc_converted; // input
582 arm_matrix_instance_q31 pDst_converted;
583
584 if (PyArg_ParseTuple(args,"O",&pSrc))
585 {
586
587 q31MatrixFromNumpy(&pSrc_converted,pSrc);
588 pSrc_converted.numCols = pSrc_converted.numCols / 2;
589
590 uint32_t row = pSrc_converted.numCols ;
591 uint32_t column = pSrc_converted.numRows*2 ;
592 createq31Matrix(&pDst_converted,row,column);
593 /*
594 Dimensions in matrix instance are not correct but they are not used
595 by CMSIS-DSP since the library is not compiled with ARM_MATRIX_CHECK.
596 So only source dimensions are used for the computation.
597
598 The dimensions are correct for createf32Matrix since we need to create
599 a bigger buffer and createf32Matrix only knows real.
600
601 */
602
603 arm_status returnValue = arm_mat_cmplx_trans_q31(&pSrc_converted,&pDst_converted);
604 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
605 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
606
607 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
608
609 Py_DECREF(theReturnOBJ);
610 FREEMATRIX(&pSrc_converted);
611 Py_DECREF(pDstOBJ);
612 return(pythonResult);
613
614 }
615 Py_RETURN_NONE;
616 }
617
618 static PyObject *
cmsis_arm_mat_cmplx_trans_q15(PyObject * obj,PyObject * args)619 cmsis_arm_mat_cmplx_trans_q15(PyObject *obj, PyObject *args)
620 {
621
622 PyObject *pSrc=NULL; // input
623 arm_matrix_instance_q15 pSrc_converted; // input
624 arm_matrix_instance_q15 pDst_converted;
625
626 if (PyArg_ParseTuple(args,"O",&pSrc))
627 {
628
629 q15MatrixFromNumpy(&pSrc_converted,pSrc);
630 pSrc_converted.numCols = pSrc_converted.numCols / 2;
631
632 uint32_t row = pSrc_converted.numCols ;
633 uint32_t column = pSrc_converted.numRows*2 ;
634 createq15Matrix(&pDst_converted,row,column);
635 /*
636 Dimensions in matrix instance are not correct but they are not used
637 by CMSIS-DSP since the library is not compiled with ARM_MATRIX_CHECK.
638 So only source dimensions are used for the computation.
639
640 The dimensions are correct for createf32Matrix since we need to create
641 a bigger buffer and createf32Matrix only knows real.
642
643 */
644
645 arm_status returnValue = arm_mat_cmplx_trans_q15(&pSrc_converted,&pDst_converted);
646 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
647 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
648
649 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
650
651 Py_DECREF(theReturnOBJ);
652 FREEMATRIX(&pSrc_converted);
653 Py_DECREF(pDstOBJ);
654 return(pythonResult);
655
656 }
657 Py_RETURN_NONE;
658 }
659
660 static PyObject *
cmsis_arm_mat_cmplx_mult_f32(PyObject * obj,PyObject * args)661 cmsis_arm_mat_cmplx_mult_f32(PyObject *obj, PyObject *args)
662 {
663
664 PyObject *pSrcA=NULL; // input
665 arm_matrix_instance_f32 pSrcA_converted; // input
666 PyObject *pSrcB=NULL; // input
667 arm_matrix_instance_f32 pSrcB_converted; // input
668 arm_matrix_instance_f32 pDst_converted;
669
670 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
671 {
672
673 f32MatrixFromNumpy(&pSrcA_converted,pSrcA);
674 f32MatrixFromNumpy(&pSrcB_converted,pSrcB);
675 pSrcA_converted.numCols = pSrcA_converted.numCols / 2;
676 pSrcB_converted.numCols = pSrcB_converted.numCols / 2;
677 uint32_t row = pSrcA_converted.numRows ;
678 uint32_t column = pSrcB_converted.numCols * 2;
679 createf32Matrix(&pDst_converted,row,column);
680
681 arm_status returnValue = arm_mat_cmplx_mult_f32(&pSrcA_converted,
682 &pSrcB_converted,&pDst_converted);
683 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
684 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
685
686 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
687
688 Py_DECREF(theReturnOBJ);
689 FREEMATRIX(&pSrcA_converted);
690 FREEMATRIX(&pSrcB_converted);
691 Py_DECREF(pDstOBJ);
692 return(pythonResult);
693
694 }
695 Py_RETURN_NONE;
696 }
697
698
699 static PyObject *
cmsis_arm_mat_cmplx_mult_q15(PyObject * obj,PyObject * args)700 cmsis_arm_mat_cmplx_mult_q15(PyObject *obj, PyObject *args)
701 {
702
703 PyObject *pSrcA=NULL; // input
704 arm_matrix_instance_q15 pSrcA_converted; // input
705 PyObject *pSrcB=NULL; // input
706 arm_matrix_instance_q15 pSrcB_converted; // input
707 PyObject *pScratch=NULL; // input
708 q15_t *pScratch_converted=NULL; // input
709 arm_matrix_instance_q15 pDst_converted;
710
711 if (PyArg_ParseTuple(args,"OOO",&pSrcA,&pSrcB,&pScratch))
712 {
713
714 q15MatrixFromNumpy(&pSrcA_converted,pSrcA);
715 q15MatrixFromNumpy(&pSrcB_converted,pSrcB);
716 GETARGUMENT(pScratch,NPY_INT16,int16_t,int16_t);
717 pSrcA_converted.numCols = pSrcA_converted.numCols / 2;
718 pSrcB_converted.numCols = pSrcB_converted.numCols / 2;
719 uint32_t row = pSrcA_converted.numRows ;
720 uint32_t column = pSrcB_converted.numCols * 2;
721 createq15Matrix(&pDst_converted,row,column);
722
723 arm_status returnValue = arm_mat_cmplx_mult_q15(&pSrcA_converted,
724 &pSrcB_converted,&pDst_converted,pScratch_converted);
725 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
726 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
727
728 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
729
730 Py_DECREF(theReturnOBJ);
731 FREEMATRIX(&pSrcA_converted);
732 FREEMATRIX(&pSrcB_converted);
733 Py_DECREF(pDstOBJ);
734 FREEARGUMENT(pScratch_converted);
735 return(pythonResult);
736
737 }
738 Py_RETURN_NONE;
739 }
740
741
742 static PyObject *
cmsis_arm_mat_cmplx_mult_q31(PyObject * obj,PyObject * args)743 cmsis_arm_mat_cmplx_mult_q31(PyObject *obj, PyObject *args)
744 {
745
746 PyObject *pSrcA=NULL; // input
747 arm_matrix_instance_q31 pSrcA_converted; // input
748 PyObject *pSrcB=NULL; // input
749 arm_matrix_instance_q31 pSrcB_converted; // input
750 arm_matrix_instance_q31 pDst_converted;
751
752 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
753 {
754
755 q31MatrixFromNumpy(&pSrcA_converted,pSrcA);
756 q31MatrixFromNumpy(&pSrcB_converted,pSrcB);
757 pSrcA_converted.numCols = pSrcA_converted.numCols / 2;
758 pSrcB_converted.numCols = pSrcB_converted.numCols / 2;
759 uint32_t row = pSrcA_converted.numRows ;
760 uint32_t column = pSrcB_converted.numCols * 2;
761 createq31Matrix(&pDst_converted,row,column);
762
763 arm_status returnValue = arm_mat_cmplx_mult_q31(&pSrcA_converted,
764 &pSrcB_converted,&pDst_converted);
765 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
766 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
767
768 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
769
770 Py_DECREF(theReturnOBJ);
771 FREEMATRIX(&pSrcA_converted);
772 FREEMATRIX(&pSrcB_converted);
773 Py_DECREF(pDstOBJ);
774 return(pythonResult);
775
776 }
777 Py_RETURN_NONE;
778 }
779
780
781 static PyObject *
cmsis_arm_mat_trans_f32(PyObject * obj,PyObject * args)782 cmsis_arm_mat_trans_f32(PyObject *obj, PyObject *args)
783 {
784
785 PyObject *pSrc=NULL; // input
786 arm_matrix_instance_f32 pSrc_converted; // input
787 arm_matrix_instance_f32 pDst_converted;
788
789 if (PyArg_ParseTuple(args,"O",&pSrc))
790 {
791
792 f32MatrixFromNumpy(&pSrc_converted,pSrc);
793 uint32_t row = pSrc_converted.numCols ;
794 uint32_t column = pSrc_converted.numRows ;
795 createf32Matrix(&pDst_converted,row,column);
796
797 arm_status returnValue = arm_mat_trans_f32(&pSrc_converted,&pDst_converted);
798 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
799 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
800
801 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
802
803 Py_DECREF(theReturnOBJ);
804 FREEMATRIX(&pSrc_converted);
805 Py_DECREF(pDstOBJ);
806 return(pythonResult);
807
808 }
809 Py_RETURN_NONE;
810 }
811
812 static PyObject *
cmsis_arm_mat_trans_f64(PyObject * obj,PyObject * args)813 cmsis_arm_mat_trans_f64(PyObject *obj, PyObject *args)
814 {
815
816 PyObject *pSrc=NULL; // input
817 arm_matrix_instance_f64 pSrc_converted; // input
818 arm_matrix_instance_f64 pDst_converted;
819
820 if (PyArg_ParseTuple(args,"O",&pSrc))
821 {
822
823 f64MatrixFromNumpy(&pSrc_converted,pSrc);
824 uint32_t row = pSrc_converted.numCols ;
825 uint32_t column = pSrc_converted.numRows ;
826 createf64Matrix(&pDst_converted,row,column);
827
828 arm_status returnValue = arm_mat_trans_f64(&pSrc_converted,&pDst_converted);
829 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
830 PyObject* pDstOBJ=NumpyArrayFromf64Matrix(&pDst_converted);
831
832 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
833
834 Py_DECREF(theReturnOBJ);
835 FREEMATRIX(&pSrc_converted);
836 Py_DECREF(pDstOBJ);
837 return(pythonResult);
838
839 }
840 Py_RETURN_NONE;
841 }
842
843 static PyObject *
cmsis_arm_mat_trans_q7(PyObject * obj,PyObject * args)844 cmsis_arm_mat_trans_q7(PyObject *obj, PyObject *args)
845 {
846
847 PyObject *pSrc=NULL; // input
848 arm_matrix_instance_q7 pSrc_converted; // input
849 arm_matrix_instance_q7 pDst_converted;
850
851 if (PyArg_ParseTuple(args,"O",&pSrc))
852 {
853
854 q7MatrixFromNumpy(&pSrc_converted,pSrc);
855 uint32_t row = pSrc_converted.numCols ;
856 uint32_t column = pSrc_converted.numRows ;
857 createq7Matrix(&pDst_converted,row,column);
858
859 arm_status returnValue = arm_mat_trans_q7(&pSrc_converted,&pDst_converted);
860 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
861 PyObject* pDstOBJ=NumpyArrayFromq7Matrix(&pDst_converted);
862
863 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
864
865 Py_DECREF(theReturnOBJ);
866 FREEMATRIX(&pSrc_converted);
867 Py_DECREF(pDstOBJ);
868 return(pythonResult);
869
870 }
871 Py_RETURN_NONE;
872 }
873
874 static PyObject *
cmsis_arm_mat_trans_q15(PyObject * obj,PyObject * args)875 cmsis_arm_mat_trans_q15(PyObject *obj, PyObject *args)
876 {
877
878 PyObject *pSrc=NULL; // input
879 arm_matrix_instance_q15 pSrc_converted; // input
880 arm_matrix_instance_q15 pDst_converted;
881
882 if (PyArg_ParseTuple(args,"O",&pSrc))
883 {
884
885 q15MatrixFromNumpy(&pSrc_converted,pSrc);
886 uint32_t row = pSrc_converted.numCols ;
887 uint32_t column = pSrc_converted.numRows ;
888 createq15Matrix(&pDst_converted,row,column);
889
890 arm_status returnValue = arm_mat_trans_q15(&pSrc_converted,&pDst_converted);
891 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
892 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
893
894 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
895
896 Py_DECREF(theReturnOBJ);
897 FREEMATRIX(&pSrc_converted);
898 Py_DECREF(pDstOBJ);
899 return(pythonResult);
900
901 }
902 Py_RETURN_NONE;
903 }
904
905
906 static PyObject *
cmsis_arm_mat_trans_q31(PyObject * obj,PyObject * args)907 cmsis_arm_mat_trans_q31(PyObject *obj, PyObject *args)
908 {
909
910 PyObject *pSrc=NULL; // input
911 arm_matrix_instance_q31 pSrc_converted; // input
912 arm_matrix_instance_q31 pDst_converted;
913
914 if (PyArg_ParseTuple(args,"O",&pSrc))
915 {
916
917 q31MatrixFromNumpy(&pSrc_converted,pSrc);
918 uint32_t row = pSrc_converted.numCols ;
919 uint32_t column = pSrc_converted.numRows ;
920 createq31Matrix(&pDst_converted,row,column);
921
922 arm_status returnValue = arm_mat_trans_q31(&pSrc_converted,&pDst_converted);
923 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
924 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
925
926 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
927
928 Py_DECREF(theReturnOBJ);
929 FREEMATRIX(&pSrc_converted);
930 Py_DECREF(pDstOBJ);
931 return(pythonResult);
932
933 }
934 Py_RETURN_NONE;
935 }
936
937 static PyObject *
cmsis_arm_mat_vec_mult_f32(PyObject * obj,PyObject * args)938 cmsis_arm_mat_vec_mult_f32(PyObject *obj, PyObject *args)
939 {
940
941 PyObject *pSrcA=NULL; // input
942 arm_matrix_instance_f32 pSrcA_converted; // input
943 PyObject *pSrcB=NULL; // input
944 float32_t *pSrcB_converted=NULL; // input
945 float32_t *pDst=NULL; // output
946
947 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
948 {
949
950 f32MatrixFromNumpy(&pSrcA_converted,pSrcA);
951 GETARGUMENT(pSrcB,NPY_DOUBLE,double,float32_t);
952 uint32_t row = pSrcA_converted.numRows ;
953 uint32_t column = pSrcA_converted.numCols ;
954 pDst=PyMem_Malloc(sizeof(float32_t)*row);
955
956 arm_mat_vec_mult_f32(&pSrcA_converted,pSrcB_converted,pDst);
957 FLOATARRAY1(pDstOBJ,row,pDst);
958
959 PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
960
961 FREEMATRIX(&pSrcA_converted);
962 FREEARGUMENT(pSrcB_converted);
963 Py_DECREF(pDstOBJ);
964 return(pythonResult);
965
966 }
967 Py_RETURN_NONE;
968 }
969
970 static PyObject *
cmsis_arm_mat_mult_f32(PyObject * obj,PyObject * args)971 cmsis_arm_mat_mult_f32(PyObject *obj, PyObject *args)
972 {
973
974 PyObject *pSrcA=NULL; // input
975 arm_matrix_instance_f32 pSrcA_converted; // input
976 PyObject *pSrcB=NULL; // input
977 arm_matrix_instance_f32 pSrcB_converted; // input
978 arm_matrix_instance_f32 pDst_converted;
979
980 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
981 {
982
983 f32MatrixFromNumpy(&pSrcA_converted,pSrcA);
984 f32MatrixFromNumpy(&pSrcB_converted,pSrcB);
985 uint32_t row = pSrcA_converted.numRows ;
986 uint32_t column = pSrcB_converted.numCols ;
987 createf32Matrix(&pDst_converted,row,column);
988
989 arm_status returnValue = arm_mat_mult_f32(&pSrcA_converted,
990 &pSrcB_converted,
991 &pDst_converted);
992 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
993 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
994
995 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
996
997 Py_DECREF(theReturnOBJ);
998 FREEMATRIX(&pSrcA_converted);
999 FREEMATRIX(&pSrcB_converted);
1000 Py_DECREF(pDstOBJ);
1001 return(pythonResult);
1002
1003 }
1004 Py_RETURN_NONE;
1005 }
1006
1007 static PyObject *
cmsis_arm_mat_mult_f64(PyObject * obj,PyObject * args)1008 cmsis_arm_mat_mult_f64(PyObject *obj, PyObject *args)
1009 {
1010
1011 PyObject *pSrcA=NULL; // input
1012 arm_matrix_instance_f64 pSrcA_converted; // input
1013 PyObject *pSrcB=NULL; // input
1014 arm_matrix_instance_f64 pSrcB_converted; // input
1015 arm_matrix_instance_f64 pDst_converted ;
1016
1017 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1018 {
1019
1020 f64MatrixFromNumpy(&pSrcA_converted,pSrcA);
1021 f64MatrixFromNumpy(&pSrcB_converted,pSrcB);
1022 uint32_t row = pSrcA_converted.numRows ;
1023 uint32_t column = pSrcB_converted.numCols ;
1024 createf64Matrix(&pDst_converted,row,column);
1025
1026 arm_status returnValue = arm_mat_mult_f64(&pSrcA_converted,
1027 &pSrcB_converted,&pDst_converted);
1028 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1029 PyObject* pDstOBJ=NumpyArrayFromf64Matrix(&pDst_converted);
1030
1031 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1032
1033 Py_DECREF(theReturnOBJ);
1034 FREEMATRIX(&pSrcA_converted);
1035 FREEMATRIX(&pSrcB_converted);
1036 Py_DECREF(pDstOBJ);
1037 return(pythonResult);
1038
1039 }
1040 Py_RETURN_NONE;
1041 }
1042
1043 static PyObject *
cmsis_arm_mat_vec_mult_q15(PyObject * obj,PyObject * args)1044 cmsis_arm_mat_vec_mult_q15(PyObject *obj, PyObject *args)
1045 {
1046
1047 PyObject *pSrcA=NULL; // input
1048 arm_matrix_instance_q15 pSrcA_converted; // input
1049 PyObject *pSrcB=NULL; // input
1050 q15_t *pSrcB_converted=NULL; // input
1051 q15_t *pDst=NULL; // output
1052
1053 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1054 {
1055
1056 q15MatrixFromNumpy(&pSrcA_converted,pSrcA);
1057 GETARGUMENT(pSrcB,NPY_INT16,int16_t,q15_t);
1058 uint32_t row = pSrcA_converted.numRows ;
1059 uint32_t column = pSrcA_converted.numCols ;
1060 pDst=PyMem_Malloc(sizeof(q15_t)*row);
1061
1062 arm_mat_vec_mult_q15(&pSrcA_converted,pSrcB_converted,pDst);
1063 INT16ARRAY1(pDstOBJ,row,pDst);
1064
1065 PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1066
1067 FREEMATRIX(&pSrcA_converted);
1068 FREEARGUMENT(pSrcB_converted);
1069 Py_DECREF(pDstOBJ);
1070 return(pythonResult);
1071
1072 }
1073 Py_RETURN_NONE;
1074 }
1075
1076 static PyObject *
cmsis_arm_mat_vec_mult_q7(PyObject * obj,PyObject * args)1077 cmsis_arm_mat_vec_mult_q7(PyObject *obj, PyObject *args)
1078 {
1079
1080 PyObject *pSrcA=NULL; // input
1081 arm_matrix_instance_q7 pSrcA_converted; // input
1082 PyObject *pSrcB=NULL; // input
1083 q7_t *pSrcB_converted=NULL; // input
1084 q7_t *pDst=NULL; // output
1085
1086 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1087 {
1088
1089 q7MatrixFromNumpy(&pSrcA_converted,pSrcA);
1090 GETARGUMENT(pSrcB,NPY_BYTE,int8_t,q7_t);
1091 uint32_t row = pSrcA_converted.numRows ;
1092 uint32_t column = pSrcA_converted.numCols ;
1093 pDst=PyMem_Malloc(sizeof(q7_t)*row);
1094
1095 arm_mat_vec_mult_q7(&pSrcA_converted,pSrcB_converted,pDst);
1096 INT8ARRAY1(pDstOBJ,row,pDst);
1097
1098 PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1099
1100 FREEMATRIX(&pSrcA_converted);
1101 FREEARGUMENT(pSrcB_converted);
1102 Py_DECREF(pDstOBJ);
1103 return(pythonResult);
1104
1105 }
1106 Py_RETURN_NONE;
1107 }
1108
1109 static PyObject *
cmsis_arm_mat_mult_q7(PyObject * obj,PyObject * args)1110 cmsis_arm_mat_mult_q7(PyObject *obj, PyObject *args)
1111 {
1112
1113 PyObject *pSrcA=NULL; // input
1114 arm_matrix_instance_q7 pSrcA_converted; // input
1115 PyObject *pSrcB=NULL; // input
1116 arm_matrix_instance_q7 pSrcB_converted; // input
1117 PyObject *pState=NULL; // input
1118 q7_t *pState_converted=NULL; // input
1119 arm_matrix_instance_q7 pDst_converted;
1120
1121 if (PyArg_ParseTuple(args,"OOO",&pSrcA,&pSrcB,&pState))
1122 {
1123
1124 q7MatrixFromNumpy(&pSrcA_converted,pSrcA);
1125 q7MatrixFromNumpy(&pSrcB_converted,pSrcB);
1126 GETARGUMENT(pState,NPY_BYTE,int8_t,q7_t);
1127 uint32_t row = pSrcA_converted.numRows ;
1128 uint32_t column = pSrcB_converted.numCols ;
1129 createq7Matrix(&pDst_converted,row,column);
1130
1131 arm_status returnValue = arm_mat_mult_q7(&pSrcA_converted,
1132 &pSrcB_converted,
1133 &pDst_converted,pState_converted);
1134 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1135 PyObject* pDstOBJ=NumpyArrayFromq7Matrix(&pDst_converted);
1136
1137 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1138
1139 Py_DECREF(theReturnOBJ);
1140 FREEMATRIX(&pSrcA_converted);
1141 FREEMATRIX(&pSrcB_converted);
1142 Py_DECREF(pDstOBJ);
1143 FREEARGUMENT(pState_converted);
1144 return(pythonResult);
1145
1146 }
1147 Py_RETURN_NONE;
1148 }
1149
1150 static PyObject *
cmsis_arm_mat_mult_q15(PyObject * obj,PyObject * args)1151 cmsis_arm_mat_mult_q15(PyObject *obj, PyObject *args)
1152 {
1153
1154 PyObject *pSrcA=NULL; // input
1155 arm_matrix_instance_q15 pSrcA_converted; // input
1156 PyObject *pSrcB=NULL; // input
1157 arm_matrix_instance_q15 pSrcB_converted; // input
1158 PyObject *pState=NULL; // input
1159 q15_t *pState_converted=NULL; // input
1160 arm_matrix_instance_q15 pDst_converted;
1161
1162 if (PyArg_ParseTuple(args,"OOO",&pSrcA,&pSrcB,&pState))
1163 {
1164
1165 q15MatrixFromNumpy(&pSrcA_converted,pSrcA);
1166 q15MatrixFromNumpy(&pSrcB_converted,pSrcB);
1167
1168 GETARGUMENT(pState,NPY_INT16,int16_t,int16_t);
1169 uint32_t row = pSrcA_converted.numRows ;
1170 uint32_t column = pSrcB_converted.numCols ;
1171 createq15Matrix(&pDst_converted,row,column);
1172
1173 arm_status returnValue = arm_mat_mult_q15(&pSrcA_converted,
1174 &pSrcB_converted,&pDst_converted,pState_converted);
1175 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1176 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
1177
1178 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1179
1180 Py_DECREF(theReturnOBJ);
1181 FREEMATRIX(&pSrcA_converted);
1182 FREEMATRIX(&pSrcB_converted);
1183 Py_DECREF(pDstOBJ);
1184 FREEARGUMENT(pState_converted);
1185 return(pythonResult);
1186
1187 }
1188 Py_RETURN_NONE;
1189 }
1190
1191
1192 static PyObject *
cmsis_arm_mat_mult_fast_q15(PyObject * obj,PyObject * args)1193 cmsis_arm_mat_mult_fast_q15(PyObject *obj, PyObject *args)
1194 {
1195
1196 PyObject *pSrcA=NULL; // input
1197 arm_matrix_instance_q15 pSrcA_converted; // input
1198 PyObject *pSrcB=NULL; // input
1199 arm_matrix_instance_q15 pSrcB_converted; // input
1200 PyObject *pState=NULL; // input
1201 q15_t *pState_converted=NULL; // input
1202 arm_matrix_instance_q15 pDst_converted;
1203
1204 if (PyArg_ParseTuple(args,"OOO",&pSrcA,&pSrcB,&pState))
1205 {
1206
1207 q15MatrixFromNumpy(&pSrcA_converted,pSrcA);
1208 q15MatrixFromNumpy(&pSrcB_converted,pSrcB);
1209 GETARGUMENT(pState,NPY_INT16,int16_t,int16_t);
1210 uint32_t row = pSrcA_converted.numRows ;
1211 uint32_t column = pSrcB_converted.numCols ;
1212 createq15Matrix(&pDst_converted,row,column);
1213
1214 arm_status returnValue = arm_mat_mult_fast_q15(&pSrcA_converted,
1215 &pSrcB_converted,&pDst_converted,pState_converted);
1216 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1217 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
1218
1219 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1220
1221 Py_DECREF(theReturnOBJ);
1222 FREEMATRIX(&pSrcA_converted);
1223 FREEMATRIX(&pSrcB_converted);
1224 Py_DECREF(pDstOBJ);
1225 FREEARGUMENT(pState_converted);
1226 return(pythonResult);
1227
1228 }
1229 Py_RETURN_NONE;
1230 }
1231
1232 static PyObject *
cmsis_arm_mat_vec_mult_q31(PyObject * obj,PyObject * args)1233 cmsis_arm_mat_vec_mult_q31(PyObject *obj, PyObject *args)
1234 {
1235
1236 PyObject *pSrcA=NULL; // input
1237 arm_matrix_instance_q31 pSrcA_converted; // input
1238 PyObject *pSrcB=NULL; // input
1239 q31_t *pSrcB_converted=NULL; // input
1240 q31_t *pDst=NULL; // output
1241
1242 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1243 {
1244
1245 q31MatrixFromNumpy(&pSrcA_converted,pSrcA);
1246 GETARGUMENT(pSrcB,NPY_INT32,int32_t,q31_t);
1247 uint32_t row = pSrcA_converted.numRows ;
1248 uint32_t column = pSrcA_converted.numCols ;
1249 pDst=PyMem_Malloc(sizeof(q31_t)*row);
1250
1251 arm_mat_vec_mult_q31(&pSrcA_converted,pSrcB_converted,pDst);
1252 INT32ARRAY1(pDstOBJ,row,pDst);
1253
1254 PyObject *pythonResult = Py_BuildValue("O",pDstOBJ);
1255
1256 FREEMATRIX(&pSrcA_converted);
1257 FREEARGUMENT(pSrcB_converted);
1258 Py_DECREF(pDstOBJ);
1259 return(pythonResult);
1260
1261 }
1262 Py_RETURN_NONE;
1263 }
1264
1265 static PyObject *
cmsis_arm_mat_mult_q31(PyObject * obj,PyObject * args)1266 cmsis_arm_mat_mult_q31(PyObject *obj, PyObject *args)
1267 {
1268
1269 PyObject *pSrcA=NULL; // input
1270 arm_matrix_instance_q31 pSrcA_converted; // input
1271 PyObject *pSrcB=NULL; // input
1272 arm_matrix_instance_q31 pSrcB_converted; // input
1273 arm_matrix_instance_q31 pDst_converted;
1274
1275 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1276 {
1277
1278 q31MatrixFromNumpy(&pSrcA_converted,pSrcA);
1279 q31MatrixFromNumpy(&pSrcB_converted,pSrcB);
1280 uint32_t row = pSrcA_converted.numRows ;
1281 uint32_t column = pSrcB_converted.numCols ;
1282 createq31Matrix(&pDst_converted,row,column);
1283
1284 arm_status returnValue = arm_mat_mult_q31(&pSrcA_converted,&pSrcB_converted,
1285 &pDst_converted);
1286 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1287 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
1288
1289 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1290
1291 Py_DECREF(theReturnOBJ);
1292 FREEMATRIX(&pSrcA_converted);
1293 FREEMATRIX(&pSrcB_converted);
1294 Py_DECREF(pDstOBJ);
1295 return(pythonResult);
1296
1297 }
1298 Py_RETURN_NONE;
1299 }
1300
1301 static PyObject *
cmsis_arm_mat_mult_opt_q31(PyObject * obj,PyObject * args)1302 cmsis_arm_mat_mult_opt_q31(PyObject *obj, PyObject *args)
1303 {
1304
1305 PyObject *pSrcA=NULL; // input
1306 arm_matrix_instance_q31 pSrcA_converted; // input
1307 PyObject *pSrcB=NULL; // input
1308 arm_matrix_instance_q31 pSrcB_converted; // input
1309 PyObject *pState=NULL; // input
1310 q31_t *pState_converted=NULL; // input
1311 arm_matrix_instance_q31 pDst_converted;
1312
1313 if (PyArg_ParseTuple(args,"OOO",&pSrcA,&pSrcB,&pState))
1314 {
1315
1316 q31MatrixFromNumpy(&pSrcA_converted,pSrcA);
1317 q31MatrixFromNumpy(&pSrcB_converted,pSrcB);
1318
1319 GETARGUMENT(pState,NPY_INT32,int32_t,int32_t);
1320 uint32_t row = pSrcA_converted.numRows ;
1321 uint32_t column = pSrcB_converted.numCols ;
1322 createq31Matrix(&pDst_converted,row,column);
1323
1324 arm_status returnValue = arm_mat_mult_opt_q31(&pSrcA_converted,
1325 &pSrcB_converted,&pDst_converted,pState_converted);
1326 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1327 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
1328
1329 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1330
1331 Py_DECREF(theReturnOBJ);
1332 FREEMATRIX(&pSrcA_converted);
1333 FREEMATRIX(&pSrcB_converted);
1334 Py_DECREF(pDstOBJ);
1335 FREEARGUMENT(pState_converted);
1336 return(pythonResult);
1337
1338 }
1339 Py_RETURN_NONE;
1340 }
1341
1342 static PyObject *
cmsis_arm_mat_mult_fast_q31(PyObject * obj,PyObject * args)1343 cmsis_arm_mat_mult_fast_q31(PyObject *obj, PyObject *args)
1344 {
1345
1346 PyObject *pSrcA=NULL; // input
1347 arm_matrix_instance_q31 pSrcA_converted; // input
1348 PyObject *pSrcB=NULL; // input
1349 arm_matrix_instance_q31 pSrcB_converted; // input
1350 arm_matrix_instance_q31 pDst_converted;
1351
1352 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1353 {
1354
1355 q31MatrixFromNumpy(&pSrcA_converted,pSrcA);
1356 q31MatrixFromNumpy(&pSrcB_converted,pSrcB);
1357 uint32_t row = pSrcA_converted.numRows ;
1358 uint32_t column = pSrcB_converted.numCols ;
1359 createq31Matrix(&pDst_converted,row,column);
1360
1361 arm_status returnValue = arm_mat_mult_fast_q31(&pSrcA_converted,
1362 &pSrcB_converted,&pDst_converted);
1363 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1364 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
1365
1366 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1367
1368 Py_DECREF(theReturnOBJ);
1369 FREEMATRIX(&pSrcA_converted);
1370 FREEMATRIX(&pSrcB_converted);
1371 Py_DECREF(pDstOBJ);
1372 return(pythonResult);
1373
1374 }
1375 Py_RETURN_NONE;
1376 }
1377
1378
1379 static PyObject *
cmsis_arm_mat_sub_f32(PyObject * obj,PyObject * args)1380 cmsis_arm_mat_sub_f32(PyObject *obj, PyObject *args)
1381 {
1382
1383 PyObject *pSrcA=NULL; // input
1384 arm_matrix_instance_f32 pSrcA_converted; // input
1385 PyObject *pSrcB=NULL; // input
1386 arm_matrix_instance_f32 pSrcB_converted; // input
1387 arm_matrix_instance_f32 pDst_converted;
1388
1389 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1390 {
1391
1392 f32MatrixFromNumpy(&pSrcA_converted,pSrcA);
1393 f32MatrixFromNumpy(&pSrcB_converted,pSrcB);
1394 uint32_t row = pSrcA_converted.numRows ;
1395 uint32_t column = pSrcB_converted.numCols ;
1396 createf32Matrix(&pDst_converted,row,column);
1397
1398 arm_status returnValue = arm_mat_sub_f32(&pSrcA_converted,
1399 &pSrcB_converted,&pDst_converted);
1400 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1401 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
1402
1403 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1404
1405 Py_DECREF(theReturnOBJ);
1406 FREEMATRIX(&pSrcA_converted);
1407 FREEMATRIX(&pSrcB_converted);
1408 Py_DECREF(pDstOBJ);
1409 return(pythonResult);
1410
1411 }
1412 Py_RETURN_NONE;
1413 }
1414
1415 static PyObject *
cmsis_arm_mat_sub_f64(PyObject * obj,PyObject * args)1416 cmsis_arm_mat_sub_f64(PyObject *obj, PyObject *args)
1417 {
1418
1419 PyObject *pSrcA=NULL; // input
1420 arm_matrix_instance_f64 pSrcA_converted; // input
1421 PyObject *pSrcB=NULL; // input
1422 arm_matrix_instance_f64 pSrcB_converted; // input
1423 arm_matrix_instance_f64 pDst_converted;
1424
1425 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1426 {
1427
1428 f64MatrixFromNumpy(&pSrcA_converted,pSrcA);
1429 f64MatrixFromNumpy(&pSrcB_converted,pSrcB);
1430 uint32_t row = pSrcA_converted.numRows ;
1431 uint32_t column = pSrcB_converted.numCols ;
1432 createf64Matrix(&pDst_converted,row,column);
1433
1434 arm_status returnValue = arm_mat_sub_f64(&pSrcA_converted,
1435 &pSrcB_converted,&pDst_converted);
1436 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1437 PyObject* pDstOBJ=NumpyArrayFromf64Matrix(&pDst_converted);
1438
1439 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1440
1441 Py_DECREF(theReturnOBJ);
1442 FREEMATRIX(&pSrcA_converted);
1443 FREEMATRIX(&pSrcB_converted);
1444 Py_DECREF(pDstOBJ);
1445 return(pythonResult);
1446
1447 }
1448 Py_RETURN_NONE;
1449 }
1450
1451
1452 static PyObject *
cmsis_arm_mat_sub_q15(PyObject * obj,PyObject * args)1453 cmsis_arm_mat_sub_q15(PyObject *obj, PyObject *args)
1454 {
1455
1456 PyObject *pSrcA=NULL; // input
1457 arm_matrix_instance_q15 pSrcA_converted; // input
1458 PyObject *pSrcB=NULL; // input
1459 arm_matrix_instance_q15 pSrcB_converted; // input
1460 arm_matrix_instance_q15 pDst_converted;
1461
1462 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1463 {
1464
1465 q15MatrixFromNumpy(&pSrcA_converted,pSrcA);
1466 q15MatrixFromNumpy(&pSrcB_converted,pSrcB);
1467 uint32_t row = pSrcA_converted.numRows ;
1468 uint32_t column = pSrcB_converted.numCols ;
1469 createq15Matrix(&pDst_converted,row,column);
1470
1471 arm_status returnValue = arm_mat_sub_q15(&pSrcA_converted,&pSrcB_converted,
1472 &pDst_converted);
1473 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1474 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
1475
1476 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1477
1478 Py_DECREF(theReturnOBJ);
1479 FREEMATRIX(&pSrcA_converted);
1480 FREEMATRIX(&pSrcB_converted);
1481 Py_DECREF(pDstOBJ);
1482 return(pythonResult);
1483
1484 }
1485 Py_RETURN_NONE;
1486 }
1487
1488
1489 static PyObject *
cmsis_arm_mat_sub_q31(PyObject * obj,PyObject * args)1490 cmsis_arm_mat_sub_q31(PyObject *obj, PyObject *args)
1491 {
1492
1493 PyObject *pSrcA=NULL; // input
1494 arm_matrix_instance_q31 pSrcA_converted; // input
1495 PyObject *pSrcB=NULL; // input
1496 arm_matrix_instance_q31 pSrcB_converted; // input
1497 arm_matrix_instance_q31 pDst_converted;
1498
1499 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
1500 {
1501
1502 q31MatrixFromNumpy(&pSrcA_converted,pSrcA);
1503 q31MatrixFromNumpy(&pSrcB_converted,pSrcB);
1504 uint32_t row = pSrcA_converted.numRows ;
1505 uint32_t column = pSrcB_converted.numCols ;
1506 createq31Matrix(&pDst_converted,row,column);
1507
1508 arm_status returnValue = arm_mat_sub_q31(&pSrcA_converted,
1509 &pSrcB_converted,&pDst_converted);
1510 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1511 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
1512
1513 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1514
1515 Py_DECREF(theReturnOBJ);
1516 FREEMATRIX(&pSrcA_converted);
1517 FREEMATRIX(&pSrcB_converted);
1518 Py_DECREF(pDstOBJ);
1519 return(pythonResult);
1520
1521 }
1522 Py_RETURN_NONE;
1523 }
1524
1525
1526 static PyObject *
cmsis_arm_mat_scale_f32(PyObject * obj,PyObject * args)1527 cmsis_arm_mat_scale_f32(PyObject *obj, PyObject *args)
1528 {
1529
1530 PyObject *pSrc=NULL; // input
1531 arm_matrix_instance_f32 pSrc_converted; // input
1532 float32_t scale; // input
1533 arm_matrix_instance_f32 pDst_converted;
1534
1535 if (PyArg_ParseTuple(args,"Of",&pSrc,&scale))
1536 {
1537
1538 f32MatrixFromNumpy(&pSrc_converted,pSrc);
1539 uint32_t row = pSrc_converted.numRows ;
1540 uint32_t column = pSrc_converted.numCols ;
1541 createf32Matrix(&pDst_converted,row,column);
1542
1543 arm_status returnValue = arm_mat_scale_f32(&pSrc_converted,scale,&pDst_converted);
1544 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1545 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
1546
1547 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1548
1549 Py_DECREF(theReturnOBJ);
1550 FREEMATRIX(&pSrc_converted);
1551 Py_DECREF(pDstOBJ);
1552 return(pythonResult);
1553
1554 }
1555 Py_RETURN_NONE;
1556 }
1557
1558
1559 static PyObject *
cmsis_arm_mat_scale_q15(PyObject * obj,PyObject * args)1560 cmsis_arm_mat_scale_q15(PyObject *obj, PyObject *args)
1561 {
1562
1563 PyObject *pSrc=NULL; // input
1564 arm_matrix_instance_q15 pSrc_converted; // input
1565 q15_t scaleFract; // input
1566 int32_t shift; // input
1567 arm_matrix_instance_q15 pDst_converted;
1568
1569 if (PyArg_ParseTuple(args,"Ohi",&pSrc,&scaleFract,&shift))
1570 {
1571
1572 q15MatrixFromNumpy(&pSrc_converted,pSrc);
1573 uint32_t row = pSrc_converted.numRows ;
1574 uint32_t column = pSrc_converted.numCols ;
1575 createq15Matrix(&pDst_converted,row,column);
1576
1577 arm_status returnValue = arm_mat_scale_q15(&pSrc_converted,scaleFract,shift,&pDst_converted);
1578 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1579 PyObject* pDstOBJ=NumpyArrayFromq15Matrix(&pDst_converted);
1580
1581 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1582
1583 Py_DECREF(theReturnOBJ);
1584 FREEMATRIX(&pSrc_converted);
1585 Py_DECREF(pDstOBJ);
1586 return(pythonResult);
1587
1588 }
1589 Py_RETURN_NONE;
1590 }
1591
1592
1593 static PyObject *
cmsis_arm_mat_scale_q31(PyObject * obj,PyObject * args)1594 cmsis_arm_mat_scale_q31(PyObject *obj, PyObject *args)
1595 {
1596
1597 PyObject *pSrc=NULL; // input
1598 arm_matrix_instance_q31 pSrc_converted; // input
1599 q31_t scaleFract; // input
1600 int32_t shift; // input
1601 arm_matrix_instance_q31 pDst_converted;
1602
1603 if (PyArg_ParseTuple(args,"Oii",&pSrc,&scaleFract,&shift))
1604 {
1605
1606 q31MatrixFromNumpy(&pSrc_converted,pSrc);
1607 uint32_t row = pSrc_converted.numRows ;
1608 uint32_t column = pSrc_converted.numCols ;
1609 createq31Matrix(&pDst_converted,row,column);
1610
1611 arm_status returnValue = arm_mat_scale_q31(&pSrc_converted,scaleFract,shift,&pDst_converted);
1612 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1613 PyObject* pDstOBJ=NumpyArrayFromq31Matrix(&pDst_converted);
1614
1615 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
1616
1617 Py_DECREF(theReturnOBJ);
1618 FREEMATRIX(&pSrc_converted);
1619 Py_DECREF(pDstOBJ);
1620 return(pythonResult);
1621
1622 }
1623 Py_RETURN_NONE;
1624 }
1625
1626 static PyObject *
cmsis_arm_mat_qr_f64(PyObject * obj,PyObject * args)1627 cmsis_arm_mat_qr_f64(PyObject *obj, PyObject *args)
1628 {
1629
1630 PyObject *src=NULL;
1631 arm_matrix_instance_f64 src_converted;
1632
1633 PyObject *pTmpaIn=NULL;
1634 float64_t *pTmpaIn_converted=NULL;
1635
1636 PyObject *pTmpbIn=NULL;
1637 float64_t *pTmpbIn_converted=NULL;
1638
1639 float64_t threshold;
1640
1641 arm_matrix_instance_f64 Q_converted;
1642 arm_matrix_instance_f64 R_converted;
1643
1644 if (PyArg_ParseTuple(args,"OdOO",&src,&threshold,&pTmpaIn,&pTmpbIn))
1645 {
1646
1647 f64MatrixFromNumpy(&src_converted,src);
1648 uint64_t column = src_converted.numCols ;
1649 uint64_t row = src_converted.numRows ;
1650
1651 GETARGUMENT(pTmpaIn,NPY_DOUBLE,double,float64_t);
1652 GETARGUMENT(pTmpbIn,NPY_DOUBLE,double,float64_t);
1653 int tmpALength=arraySizepTmpaIn ;
1654 int tmpBLength=arraySizepTmpbIn ;
1655
1656
1657 createf64Matrix(&Q_converted,row,row);
1658 createf64Matrix(&R_converted,row,column);
1659 float64_t *pTau=PyMem_Malloc(sizeof(float64_t)*column);
1660 float64_t *pTmpa=PyMem_Malloc(sizeof(float64_t)*tmpALength);
1661 float64_t *pTmpb=PyMem_Malloc(sizeof(float64_t)*tmpBLength);
1662
1663 arm_status returnValue = arm_mat_qr_f64(&src_converted,threshold,
1664 &R_converted,&Q_converted,pTau,pTmpa,pTmpb);
1665
1666 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1667 PyObject* ROBJ=NumpyArrayFromf64Matrix(&R_converted);
1668 PyObject* QOBJ=NumpyArrayFromf64Matrix(&Q_converted);
1669 FLOAT64ARRAY1(pTauOBJ,column,pTau);
1670
1671 PyObject *pythonResult = Py_BuildValue("OOOO",theReturnOBJ,ROBJ,QOBJ,pTauOBJ);
1672
1673 Py_DECREF(theReturnOBJ);
1674 Py_DECREF(ROBJ);
1675 Py_DECREF(QOBJ);
1676 Py_DECREF(pTauOBJ);
1677 FREEMATRIX(&src_converted);
1678 FREEARGUMENT(pTmpaIn_converted);
1679 FREEARGUMENT(pTmpbIn_converted);
1680
1681 PyMem_Free(pTmpa);
1682 PyMem_Free(pTmpb);
1683
1684 return(pythonResult);
1685
1686 }
1687 Py_RETURN_NONE;
1688 }
1689
1690 static PyObject *
cmsis_arm_mat_qr_f32(PyObject * obj,PyObject * args)1691 cmsis_arm_mat_qr_f32(PyObject *obj, PyObject *args)
1692 {
1693
1694 PyObject *src=NULL;
1695 arm_matrix_instance_f32 src_converted;
1696
1697 PyObject *pTmpaIn=NULL;
1698 float32_t *pTmpaIn_converted=NULL;
1699
1700 PyObject *pTmpbIn=NULL;
1701 float32_t *pTmpbIn_converted=NULL;
1702
1703 float32_t threshold;
1704
1705 arm_matrix_instance_f32 Q_converted;
1706 arm_matrix_instance_f32 R_converted;
1707
1708 if (PyArg_ParseTuple(args,"OfOO",&src,&threshold,&pTmpaIn,&pTmpbIn))
1709 {
1710
1711 f32MatrixFromNumpy(&src_converted,src);
1712 uint32_t column = src_converted.numCols ;
1713 uint32_t row = src_converted.numRows ;
1714
1715 GETARGUMENT(pTmpaIn,NPY_DOUBLE,double,float32_t);
1716 GETARGUMENT(pTmpbIn,NPY_DOUBLE,double,float32_t);
1717 int tmpALength=arraySizepTmpaIn ;
1718 int tmpBLength=arraySizepTmpbIn ;
1719
1720
1721 createf32Matrix(&Q_converted,row,row);
1722 createf32Matrix(&R_converted,row,column);
1723 float32_t *pTau=PyMem_Malloc(sizeof(float32_t)*column);
1724 float32_t *pTmpa=PyMem_Malloc(sizeof(float32_t)*tmpALength);
1725 float32_t *pTmpb=PyMem_Malloc(sizeof(float32_t)*tmpBLength);
1726
1727 arm_status returnValue = arm_mat_qr_f32(&src_converted,threshold,
1728 &R_converted,&Q_converted,pTau,pTmpa,pTmpb);
1729
1730 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1731 PyObject* ROBJ=NumpyArrayFromf32Matrix(&R_converted);
1732 PyObject* QOBJ=NumpyArrayFromf32Matrix(&Q_converted);
1733 FLOATARRAY1(pTauOBJ,column,pTau);
1734
1735 PyObject *pythonResult = Py_BuildValue("OOOO",theReturnOBJ,ROBJ,QOBJ,pTauOBJ);
1736
1737 Py_DECREF(theReturnOBJ);
1738 Py_DECREF(ROBJ);
1739 Py_DECREF(QOBJ);
1740 Py_DECREF(pTauOBJ);
1741 FREEMATRIX(&src_converted);
1742 FREEARGUMENT(pTmpaIn_converted);
1743 FREEARGUMENT(pTmpbIn_converted);
1744
1745 PyMem_Free(pTmpa);
1746 PyMem_Free(pTmpb);
1747
1748
1749 return(pythonResult);
1750
1751 }
1752 Py_RETURN_NONE;
1753 }
1754
1755 static PyObject *
cmsis_arm_householder_f64(PyObject * obj,PyObject * args)1756 cmsis_arm_householder_f64(PyObject *obj, PyObject *args)
1757 {
1758
1759 PyObject *pSrc=NULL; // input
1760 float64_t *pSrc_converted=NULL; // input
1761 uint32_t blockSize; // input
1762 float64_t pResult; // output
1763 float64_t *pDst=NULL; // output
1764 float64_t threshold;
1765
1766 if (PyArg_ParseTuple(args,"Od",&pSrc,&threshold))
1767 {
1768
1769 GETARGUMENT(pSrc,NPY_DOUBLE,double,float64_t);
1770 blockSize = arraySizepSrc ;
1771
1772 pDst=PyMem_Malloc(sizeof(float64_t)*blockSize);
1773
1774
1775 pResult=arm_householder_f64(pSrc_converted,threshold,blockSize,pDst);
1776 PyObject* pResultOBJ=Py_BuildValue("d",pResult);
1777 FLOAT64ARRAY1(pDstOBJ,blockSize,pDst);
1778
1779 PyObject *betaResult = Py_BuildValue("O",pResultOBJ);
1780 PyObject *vecResult = Py_BuildValue("O",pDstOBJ);
1781
1782 PyObject *pythonResult = Py_BuildValue("OO",betaResult,vecResult);
1783
1784 FREEARGUMENT(pSrc_converted);
1785 Py_DECREF(pResultOBJ);
1786 Py_DECREF(pDstOBJ);
1787 return(pythonResult);
1788
1789 }
1790 Py_RETURN_NONE;
1791 }
1792
1793 static PyObject *
cmsis_arm_householder_f32(PyObject * obj,PyObject * args)1794 cmsis_arm_householder_f32(PyObject *obj, PyObject *args)
1795 {
1796
1797 PyObject *pSrc=NULL; // input
1798 float32_t *pSrc_converted=NULL; // input
1799 uint32_t blockSize; // input
1800 float32_t pResult; // output
1801 float32_t *pDst=NULL; // output
1802 float32_t threshold;
1803
1804 if (PyArg_ParseTuple(args,"Of",&pSrc,&threshold))
1805 {
1806
1807 GETARGUMENT(pSrc,NPY_DOUBLE,double,float32_t);
1808 blockSize = arraySizepSrc ;
1809
1810 pDst=PyMem_Malloc(sizeof(float32_t)*blockSize);
1811
1812
1813 pResult=arm_householder_f32(pSrc_converted,threshold,blockSize,pDst);
1814 PyObject* pResultOBJ=Py_BuildValue("f",pResult);
1815 FLOATARRAY1(pDstOBJ,blockSize,pDst);
1816
1817 PyObject *betaResult = Py_BuildValue("O",pResultOBJ);
1818 PyObject *vecResult = Py_BuildValue("O",pDstOBJ);
1819
1820 PyObject *pythonResult = Py_BuildValue("OO",betaResult,vecResult);
1821
1822 FREEARGUMENT(pSrc_converted);
1823 Py_DECREF(pResultOBJ);
1824 Py_DECREF(pDstOBJ);
1825 return(pythonResult);
1826
1827 }
1828 Py_RETURN_NONE;
1829 }
1830
1831 static PyObject *
cmsis_arm_mat_inverse_f32(PyObject * obj,PyObject * args)1832 cmsis_arm_mat_inverse_f32(PyObject *obj, PyObject *args)
1833 {
1834
1835 PyObject *src=NULL; // input
1836 arm_matrix_instance_f32 src_converted; // input
1837 arm_matrix_instance_f32 dst_converted;
1838
1839 if (PyArg_ParseTuple(args,"O",&src))
1840 {
1841
1842 f32MatrixFromNumpy(&src_converted,src);
1843 uint32_t row = src_converted.numCols ;
1844 uint32_t column = src_converted.numRows ;
1845 createf32Matrix(&dst_converted,row,column);
1846
1847 arm_status returnValue = arm_mat_inverse_f32(&src_converted,&dst_converted);
1848 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1849 PyObject* dstOBJ=NumpyArrayFromf32Matrix(&dst_converted);
1850
1851 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,dstOBJ);
1852
1853 Py_DECREF(theReturnOBJ);
1854 FREEMATRIX(&src_converted);
1855 Py_DECREF(dstOBJ);
1856 return(pythonResult);
1857
1858 }
1859 Py_RETURN_NONE;
1860 }
1861
1862
1863 static PyObject *
cmsis_arm_mat_inverse_f64(PyObject * obj,PyObject * args)1864 cmsis_arm_mat_inverse_f64(PyObject *obj, PyObject *args)
1865 {
1866
1867 PyObject *src=NULL; // input
1868 arm_matrix_instance_f64 src_converted; // input
1869 arm_matrix_instance_f64 dst_converted;
1870
1871 if (PyArg_ParseTuple(args,"O",&src))
1872 {
1873
1874 f64MatrixFromNumpy(&src_converted,src);
1875 uint32_t row = src_converted.numCols ;
1876 uint32_t column = src_converted.numRows ;
1877 createf64Matrix(&dst_converted,row,column);
1878
1879 arm_status returnValue = arm_mat_inverse_f64(&src_converted,&dst_converted);
1880 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1881 PyObject* dstOBJ=NumpyArrayFromf64Matrix(&dst_converted);
1882
1883 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,dstOBJ);
1884
1885 Py_DECREF(theReturnOBJ);
1886 FREEMATRIX(&src_converted);
1887 Py_DECREF(dstOBJ);
1888 return(pythonResult);
1889
1890 }
1891 Py_RETURN_NONE;
1892 }
1893
1894
1895 static PyObject *
cmsis_arm_mat_cholesky_f32(PyObject * obj,PyObject * args)1896 cmsis_arm_mat_cholesky_f32(PyObject *obj, PyObject *args)
1897 {
1898
1899 PyObject *src=NULL; // input
1900 arm_matrix_instance_f32 src_converted; // input
1901 arm_matrix_instance_f32 dst_converted;
1902
1903 if (PyArg_ParseTuple(args,"O",&src))
1904 {
1905
1906 f32MatrixFromNumpy(&src_converted,src);
1907 uint32_t column = src_converted.numCols ;
1908 uint32_t row = src_converted.numRows ;
1909 createf32Matrix(&dst_converted,row,column);
1910
1911 float32_t *p=dst_converted.pData;
1912 for(int r=0;r<row;r++)
1913 {
1914 for(int c =0; c < column;c++)
1915 {
1916 *p++=0.0f;
1917 }
1918 }
1919
1920 arm_status returnValue = arm_mat_cholesky_f32(&src_converted,&dst_converted);
1921 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1922 PyObject* dstOBJ=NumpyArrayFromf32Matrix(&dst_converted);
1923
1924 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,dstOBJ);
1925
1926 Py_DECREF(theReturnOBJ);
1927 FREEMATRIX(&src_converted);
1928 Py_DECREF(dstOBJ);
1929 return(pythonResult);
1930
1931 }
1932 Py_RETURN_NONE;
1933 }
1934
1935 static PyObject *
cmsis_arm_mat_cholesky_f64(PyObject * obj,PyObject * args)1936 cmsis_arm_mat_cholesky_f64(PyObject *obj, PyObject *args)
1937 {
1938
1939 PyObject *src=NULL; // input
1940 arm_matrix_instance_f64 src_converted; // input
1941 arm_matrix_instance_f64 dst_converted;
1942
1943 if (PyArg_ParseTuple(args,"O",&src))
1944 {
1945
1946 f64MatrixFromNumpy(&src_converted,src);
1947 uint32_t column = src_converted.numCols ;
1948 uint32_t row = src_converted.numRows ;
1949 createf64Matrix(&dst_converted,row,column);
1950
1951 float64_t *p=dst_converted.pData;
1952 for(int r=0;r<row;r++)
1953 {
1954 for(int c =0; c < column;c++)
1955 {
1956 *p++=0.0f;
1957 }
1958 }
1959
1960
1961 arm_status returnValue = arm_mat_cholesky_f64(&src_converted,&dst_converted);
1962 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
1963 PyObject* dstOBJ=NumpyArrayFromf64Matrix(&dst_converted);
1964
1965 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,dstOBJ);
1966
1967 Py_DECREF(theReturnOBJ);
1968 FREEMATRIX(&src_converted);
1969 Py_DECREF(dstOBJ);
1970 return(pythonResult);
1971
1972 }
1973 Py_RETURN_NONE;
1974 }
1975
1976 static PyObject *
cmsis_arm_mat_ldlt_f32(PyObject * obj,PyObject * args)1977 cmsis_arm_mat_ldlt_f32(PyObject *obj, PyObject *args)
1978 {
1979
1980 PyObject *src=NULL; // input
1981 arm_matrix_instance_f32 src_converted; // input
1982 arm_matrix_instance_f32 l_converted;
1983 arm_matrix_instance_f32 d_converted;
1984
1985 if (PyArg_ParseTuple(args,"O",&src))
1986 {
1987
1988 f32MatrixFromNumpy(&src_converted,src);
1989 uint32_t column = src_converted.numCols ;
1990 uint32_t row = src_converted.numRows ;
1991
1992 createf32Matrix(&l_converted,row,column);
1993 createf32Matrix(&d_converted,row,column);
1994
1995 uint16_t *pPerm=(uint16_t *)PyMem_Malloc(sizeof(uint16_t)*row);
1996 INT16ARRAY1(pPermOBJ,row,pPerm);
1997
1998 arm_status returnValue = arm_mat_ldlt_f32(&src_converted,&l_converted,&d_converted,pPerm);
1999 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
2000
2001 PyObject* lOBJ=NumpyArrayFromf32Matrix(&l_converted);
2002 PyObject* dOBJ=NumpyArrayFromf32Matrix(&d_converted);
2003
2004
2005 PyObject *pythonResult = Py_BuildValue("OOOO",theReturnOBJ,lOBJ,dOBJ,pPermOBJ);
2006
2007 Py_DECREF(theReturnOBJ);
2008 FREEMATRIX(&src_converted);
2009 Py_DECREF(lOBJ);
2010 Py_DECREF(dOBJ);
2011 Py_DECREF(pPermOBJ);
2012
2013 return(pythonResult);
2014
2015 }
2016 Py_RETURN_NONE;
2017 }
2018
2019 static PyObject *
cmsis_arm_mat_ldlt_f64(PyObject * obj,PyObject * args)2020 cmsis_arm_mat_ldlt_f64(PyObject *obj, PyObject *args)
2021 {
2022
2023 PyObject *src=NULL; // input
2024 arm_matrix_instance_f64 src_converted; // input
2025 arm_matrix_instance_f64 l_converted;
2026 arm_matrix_instance_f64 d_converted;
2027
2028 if (PyArg_ParseTuple(args,"O",&src))
2029 {
2030
2031 f64MatrixFromNumpy(&src_converted,src);
2032 uint32_t column = src_converted.numCols ;
2033 uint32_t row = src_converted.numRows ;
2034
2035 createf64Matrix(&l_converted,row,column);
2036 createf64Matrix(&d_converted,row,column);
2037
2038 uint16_t *pPerm=(uint16_t *)PyMem_Malloc(sizeof(uint16_t)*row);
2039 INT16ARRAY1(pPermOBJ,row,pPerm);
2040
2041 arm_status returnValue = arm_mat_ldlt_f64(&src_converted,&l_converted,&d_converted,pPerm);
2042 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
2043
2044 PyObject* lOBJ=NumpyArrayFromf64Matrix(&l_converted);
2045 PyObject* dOBJ=NumpyArrayFromf64Matrix(&d_converted);
2046
2047
2048 PyObject *pythonResult = Py_BuildValue("OOOO",theReturnOBJ,lOBJ,dOBJ,pPermOBJ);
2049
2050 Py_DECREF(theReturnOBJ);
2051 FREEMATRIX(&src_converted);
2052 Py_DECREF(lOBJ);
2053 Py_DECREF(dOBJ);
2054 Py_DECREF(pPermOBJ);
2055
2056 return(pythonResult);
2057
2058 }
2059 Py_RETURN_NONE;
2060 }
2061
2062 static PyObject *
cmsis_arm_mat_solve_lower_triangular_f32(PyObject * obj,PyObject * args)2063 cmsis_arm_mat_solve_lower_triangular_f32(PyObject *obj, PyObject *args)
2064 {
2065
2066 PyObject *pSrcA=NULL; // input
2067 arm_matrix_instance_f32 pSrcA_converted; // input
2068 PyObject *pSrcB=NULL; // input
2069 arm_matrix_instance_f32 pSrcB_converted; // input
2070 arm_matrix_instance_f32 pDst_converted;
2071
2072 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
2073 {
2074
2075 f32MatrixFromNumpy(&pSrcA_converted,pSrcA);
2076 f32MatrixFromNumpy(&pSrcB_converted,pSrcB);
2077 uint32_t column = pSrcB_converted.numCols ;
2078 uint32_t row = pSrcA_converted.numRows ;
2079
2080 createf32Matrix(&pDst_converted,row,column);
2081
2082 arm_status returnValue = arm_mat_solve_lower_triangular_f32(&pSrcA_converted,
2083 &pSrcB_converted,&pDst_converted);
2084 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
2085 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
2086
2087 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
2088
2089 Py_DECREF(theReturnOBJ);
2090 FREEMATRIX(&pSrcA_converted);
2091 FREEMATRIX(&pSrcB_converted);
2092 Py_DECREF(pDstOBJ);
2093 return(pythonResult);
2094
2095 }
2096 Py_RETURN_NONE;
2097 }
2098
2099 static PyObject *
cmsis_arm_mat_solve_lower_triangular_f64(PyObject * obj,PyObject * args)2100 cmsis_arm_mat_solve_lower_triangular_f64(PyObject *obj, PyObject *args)
2101 {
2102
2103 PyObject *pSrcA=NULL; // input
2104 arm_matrix_instance_f64 pSrcA_converted; // input
2105 PyObject *pSrcB=NULL; // input
2106 arm_matrix_instance_f64 pSrcB_converted; // input
2107 arm_matrix_instance_f64 pDst_converted;
2108
2109 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
2110 {
2111
2112 f64MatrixFromNumpy(&pSrcA_converted,pSrcA);
2113 f64MatrixFromNumpy(&pSrcB_converted,pSrcB);
2114 uint32_t column = pSrcB_converted.numCols ;
2115 uint32_t row = pSrcA_converted.numRows ;
2116
2117 createf64Matrix(&pDst_converted,row,column);
2118
2119 arm_status returnValue = arm_mat_solve_lower_triangular_f64(&pSrcA_converted,
2120 &pSrcB_converted,&pDst_converted);
2121 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
2122 PyObject* pDstOBJ=NumpyArrayFromf64Matrix(&pDst_converted);
2123
2124 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
2125
2126 Py_DECREF(theReturnOBJ);
2127 FREEMATRIX(&pSrcA_converted);
2128 FREEMATRIX(&pSrcB_converted);
2129 Py_DECREF(pDstOBJ);
2130 return(pythonResult);
2131
2132 }
2133 Py_RETURN_NONE;
2134 }
2135
2136 static PyObject *
cmsis_arm_mat_solve_upper_triangular_f32(PyObject * obj,PyObject * args)2137 cmsis_arm_mat_solve_upper_triangular_f32(PyObject *obj, PyObject *args)
2138 {
2139
2140 PyObject *pSrcA=NULL; // input
2141 arm_matrix_instance_f32 pSrcA_converted; // input
2142 PyObject *pSrcB=NULL; // input
2143 arm_matrix_instance_f32 pSrcB_converted; // input
2144 arm_matrix_instance_f32 pDst_converted;
2145
2146 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
2147 {
2148
2149 f32MatrixFromNumpy(&pSrcA_converted,pSrcA);
2150 f32MatrixFromNumpy(&pSrcB_converted,pSrcB);
2151 uint32_t column = pSrcB_converted.numCols ;
2152 uint32_t row = pSrcA_converted.numRows ;
2153 createf32Matrix(&pDst_converted,row,column);
2154
2155 arm_status returnValue = arm_mat_solve_upper_triangular_f32(&pSrcA_converted,
2156 &pSrcB_converted,&pDst_converted);
2157 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
2158 PyObject* pDstOBJ=NumpyArrayFromf32Matrix(&pDst_converted);
2159
2160 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
2161
2162 Py_DECREF(theReturnOBJ);
2163 FREEMATRIX(&pSrcA_converted);
2164 FREEMATRIX(&pSrcB_converted);
2165 Py_DECREF(pDstOBJ);
2166 return(pythonResult);
2167
2168 }
2169 Py_RETURN_NONE;
2170 }
2171
2172 static PyObject *
cmsis_arm_mat_solve_upper_triangular_f64(PyObject * obj,PyObject * args)2173 cmsis_arm_mat_solve_upper_triangular_f64(PyObject *obj, PyObject *args)
2174 {
2175
2176 PyObject *pSrcA=NULL; // input
2177 arm_matrix_instance_f64 pSrcA_converted; // input
2178 PyObject *pSrcB=NULL; // input
2179 arm_matrix_instance_f64 pSrcB_converted; // input
2180 arm_matrix_instance_f64 pDst_converted;
2181
2182 if (PyArg_ParseTuple(args,"OO",&pSrcA,&pSrcB))
2183 {
2184
2185 f64MatrixFromNumpy(&pSrcA_converted,pSrcA);
2186 f64MatrixFromNumpy(&pSrcB_converted,pSrcB);
2187 uint32_t column = pSrcB_converted.numCols ;
2188 uint32_t row = pSrcA_converted.numRows ;
2189 createf64Matrix(&pDst_converted,row,column);
2190
2191 arm_status returnValue = arm_mat_solve_upper_triangular_f64(&pSrcA_converted,
2192 &pSrcB_converted,&pDst_converted);
2193 PyObject* theReturnOBJ=Py_BuildValue("i",returnValue);
2194 PyObject* pDstOBJ=NumpyArrayFromf64Matrix(&pDst_converted);
2195
2196 PyObject *pythonResult = Py_BuildValue("OO",theReturnOBJ,pDstOBJ);
2197
2198 Py_DECREF(theReturnOBJ);
2199 FREEMATRIX(&pSrcA_converted);
2200 FREEMATRIX(&pSrcB_converted);
2201 Py_DECREF(pDstOBJ);
2202 return(pythonResult);
2203
2204 }
2205 Py_RETURN_NONE;
2206 }
2207
2208
2209 static PyMethodDef CMSISDSPMethods[] = {
2210
2211 {"arm_mat_add_f32", cmsis_arm_mat_add_f32, METH_VARARGS,""},
2212 {"arm_mat_add_q15", cmsis_arm_mat_add_q15, METH_VARARGS,""},
2213 {"arm_mat_add_q31", cmsis_arm_mat_add_q31, METH_VARARGS,""},
2214 {"arm_mat_cmplx_mult_f32", cmsis_arm_mat_cmplx_mult_f32, METH_VARARGS,""},
2215 {"arm_mat_cmplx_mult_q15", cmsis_arm_mat_cmplx_mult_q15, METH_VARARGS,""},
2216 {"arm_mat_cmplx_mult_q31", cmsis_arm_mat_cmplx_mult_q31, METH_VARARGS,""},
2217 {"arm_mat_trans_f32", cmsis_arm_mat_trans_f32, METH_VARARGS,""},
2218 {"arm_mat_trans_f64", cmsis_arm_mat_trans_f64, METH_VARARGS,""},
2219 {"arm_mat_trans_q15", cmsis_arm_mat_trans_q15, METH_VARARGS,""},
2220 {"arm_mat_trans_q31", cmsis_arm_mat_trans_q31, METH_VARARGS,""},
2221 {"arm_mat_trans_q7", cmsis_arm_mat_trans_q7, METH_VARARGS,""},
2222
2223
2224 {"arm_mat_vec_mult_f32", cmsis_arm_mat_vec_mult_f32, METH_VARARGS,""},
2225 {"arm_mat_vec_mult_q31", cmsis_arm_mat_vec_mult_q31, METH_VARARGS,""},
2226 {"arm_mat_vec_mult_q15", cmsis_arm_mat_vec_mult_q15, METH_VARARGS,""},
2227 {"arm_mat_vec_mult_q7", cmsis_arm_mat_vec_mult_q7, METH_VARARGS,""},
2228
2229 {"arm_mat_mult_f32", cmsis_arm_mat_mult_f32, METH_VARARGS,""},
2230 {"arm_mat_mult_f64", cmsis_arm_mat_mult_f32, METH_VARARGS,""},
2231 {"arm_mat_mult_q7", cmsis_arm_mat_mult_q7, METH_VARARGS,""},
2232 {"arm_mat_mult_q15", cmsis_arm_mat_mult_q15, METH_VARARGS,""},
2233 {"arm_mat_mult_fast_q15", cmsis_arm_mat_mult_fast_q15, METH_VARARGS,""},
2234 {"arm_mat_mult_q31", cmsis_arm_mat_mult_q31, METH_VARARGS,""},
2235 {"arm_mat_mult_opt_q31", cmsis_arm_mat_mult_opt_q31, METH_VARARGS,""},
2236 {"arm_mat_mult_fast_q31", cmsis_arm_mat_mult_fast_q31, METH_VARARGS,""},
2237 {"arm_mat_sub_f32", cmsis_arm_mat_sub_f32, METH_VARARGS,""},
2238 {"arm_mat_sub_f64", cmsis_arm_mat_sub_f64, METH_VARARGS,""},
2239 {"arm_mat_sub_q15", cmsis_arm_mat_sub_q15, METH_VARARGS,""},
2240 {"arm_mat_sub_q31", cmsis_arm_mat_sub_q31, METH_VARARGS,""},
2241 {"arm_mat_scale_f32", cmsis_arm_mat_scale_f32, METH_VARARGS,""},
2242 {"arm_mat_scale_q15", cmsis_arm_mat_scale_q15, METH_VARARGS,""},
2243 {"arm_mat_scale_q31", cmsis_arm_mat_scale_q31, METH_VARARGS,""},
2244 {"arm_mat_inverse_f32", cmsis_arm_mat_inverse_f32, METH_VARARGS,""},
2245 {"arm_mat_inverse_f64", cmsis_arm_mat_inverse_f64, METH_VARARGS,""},
2246 {"arm_mat_cmplx_trans_f32", cmsis_arm_mat_cmplx_trans_f32, METH_VARARGS,""},
2247 {"arm_mat_cmplx_trans_q31", cmsis_arm_mat_cmplx_trans_q31, METH_VARARGS,""},
2248 {"arm_mat_cmplx_trans_q15", cmsis_arm_mat_cmplx_trans_q15, METH_VARARGS,""},
2249 {"arm_mat_cholesky_f32", cmsis_arm_mat_cholesky_f32, METH_VARARGS,""},
2250 {"arm_mat_cholesky_f64", cmsis_arm_mat_cholesky_f64, METH_VARARGS,""},
2251 {"arm_mat_ldlt_f32", cmsis_arm_mat_ldlt_f32, METH_VARARGS,""},
2252 {"arm_mat_ldlt_f64", cmsis_arm_mat_ldlt_f64, METH_VARARGS,""},
2253 {"arm_mat_solve_lower_triangular_f32", cmsis_arm_mat_solve_lower_triangular_f32, METH_VARARGS,""},
2254 {"arm_mat_solve_lower_triangular_f64", cmsis_arm_mat_solve_lower_triangular_f64, METH_VARARGS,""},
2255 {"arm_mat_solve_upper_triangular_f32", cmsis_arm_mat_solve_upper_triangular_f32, METH_VARARGS,""},
2256 {"arm_mat_solve_upper_triangular_f64", cmsis_arm_mat_solve_upper_triangular_f64, METH_VARARGS,""},
2257 {"arm_householder_f32", cmsis_arm_householder_f32, METH_VARARGS,""},
2258 {"arm_householder_f64", cmsis_arm_householder_f64, METH_VARARGS,""},
2259 {"arm_mat_qr_f32", cmsis_arm_mat_qr_f32, METH_VARARGS,""},
2260 {"arm_mat_qr_f64", cmsis_arm_mat_qr_f64, METH_VARARGS,""},
2261
2262 {"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
2263
2264 {NULL, NULL, 0, NULL} /* Sentinel */
2265 };
2266
2267 #ifdef IS_PY3K
cmsisdsp_traverse(PyObject * m,visitproc visit,void * arg)2268 static int cmsisdsp_traverse(PyObject *m, visitproc visit, void *arg) {
2269 Py_VISIT(GETSTATE(m)->error);
2270 return 0;
2271 }
2272
cmsisdsp_clear(PyObject * m)2273 static int cmsisdsp_clear(PyObject *m) {
2274 Py_CLEAR(GETSTATE(m)->error);
2275 return 0;
2276 }
2277
2278
2279 static struct PyModuleDef moduledef = {
2280 PyModuleDef_HEAD_INIT,
2281 MODNAME,
2282 NULL,
2283 sizeof(struct module_state),
2284 CMSISDSPMethods,
2285 NULL,
2286 cmsisdsp_traverse,
2287 cmsisdsp_clear,
2288 NULL
2289 };
2290
2291 #define INITERROR return NULL
2292
2293 PyMODINIT_FUNC
CAT(PyInit_,MODINITNAME)2294 CAT(PyInit_,MODINITNAME)(void)
2295
2296
2297 #else
2298 #define INITERROR return
2299
2300 void CAT(init,MODINITNAME)(void)
2301 #endif
2302 {
2303 import_array();
2304
2305 #ifdef IS_PY3K
2306 PyObject *module = PyModule_Create(&moduledef);
2307 #else
2308 PyObject *module = Py_InitModule(MODNAME, CMSISDSPMethods);
2309 #endif
2310
2311 if (module == NULL)
2312 INITERROR;
2313 struct module_state *st = GETSTATE(module);
2314
2315 st->error = PyErr_NewException(MODNAME".Error", NULL, NULL);
2316 if (st->error == NULL) {
2317 Py_DECREF(module);
2318 INITERROR;
2319 }
2320
2321
2322 typeRegistration(module);
2323
2324 #ifdef IS_PY3K
2325 return module;
2326 #endif
2327 }