ISCE_INSAR/library/isceLib/pyx/LinAlg.pyx

118 lines
3.4 KiB
Cython
Raw Permalink Normal View History

2019-01-16 19:40:08 +00:00
#cython: language_level=3
#
# Author: Joshua Cohen
# Copyright 2017
#
#################################################################
cdef extern from "LinAlg.h" namespace "isceLib":
cdef cppclass LinAlg:
LinAlg() except +
void cross(double[3],double[3],double[3])
double dot(double[3],double[3])
void linComb(double,double[3],double,double[3],double[3])
void matMat(double[3][3],double[3][3],double[3][3])
void matVec(double[3][3],double[3],double[3])
double norm(double[3])
void tranMat(double[3][3],double[3][3])
void unitVec(double[3],double[3])
cdef class PyLinAlg:
cdef LinAlg c_linAlg
def __cinit__(self):
return
def cross(self, list a, list b, list c):
cdef double _a[3]
cdef double _b[3]
cdef double _c[3]
for i in range(3):
_a[i] = a[i]
_b[i] = b[i]
_c[i] = c[i]
self.c_linAlg.cross(_a,_b,_c)
for i in range(3):
a[i] = _a[i]
b[i] = _b[i]
c[i] = _c[i]
def dot(self, list a, list b):
cdef double _a[3]
cdef double _b[3]
for i in range(3):
_a[i] = a[i]
_b[i] = b[i]
return self.c_linAlg.dot(_a,_b)
def linComb(self, double a, list b, double c, list d, list e):
cdef double _b[3]
cdef double _d[3]
cdef double _e[3]
for i in range (3):
_b[i] = b[i]
_d[i] = d[i]
_e[i] = e[i]
self.c_linAlg.linComb(a,_b,c,_d,_e)
for i in range(3):
b[i] = _b[i]
d[i] = _d[i]
e[i] = _e[i]
def matMat(self, list a, list b, list c):
cdef double _a[3][3]
cdef double _b[3][3]
cdef double _c[3][3]
for i in range(3):
for j in range(3):
_a[i][j] = a[i][j]
_b[i][j] = b[i][j]
_c[i][j] = c[i][j]
self.c_linAlg.matMat(_a,_b,_c)
for i in range(3):
for j in range(3):
a[i][j] = _a[i][j]
b[i][j] = _b[i][j]
c[i][j] = _c[i][j]
def matVec(self, list a, list b, list c):
cdef double _a[3][3]
cdef double _b[3]
cdef double _c[3]
for i in range(3):
for j in range(3):
_a[i][j] = a[i][j]
_b[i] = b[i]
_c[i] = c[i]
self.c_linAlg.matVec(_a,_b,_c)
for i in range(3):
for j in range(3):
a[i][j] = _a[i][j]
b[i] = _b[i]
c[i] = _c[i]
def norm(self, list a):
cdef double _a[3]
for i in range(3):
_a[i] = a[i]
return self.c_linAlg.norm(_a)
def tranMat(self, list a, list b):
cdef double _a[3][3]
cdef double _b[3][3]
for i in range(3):
for j in range(3):
_a[i][j] = a[i][j]
_b[i][j] = b[i][j]
self.c_linAlg.tranMat(_a,_b)
for i in range(3):
for j in range(3):
a[i][j] = _a[i][j]
b[i][j] = _b[i][j]
def unitVec(self, list a, list b):
cdef double _a[3]
cdef double _b[3]
for i in range(3):
_a[i] = a[i]
_b[i] = b[i]
self.c_linAlg.unitVec(_a,_b)
for i in range(3):
a[i] = _a[i]
b[i] = _b[i]