% -*- mode: Noweb; noweb-code-mode: python-mode -*- \section{PXD file} \label{sec:pxd-file} <>= from utilities cimport float2, cuFloatArray, cuFloatComplexArray cdef extern from "GBTBT.h": cdef cppclass GBTBT: int M, N, NT, NT2, NDFT, HALF_NDFT, NU_TOTAL, NF, NF2, ind_size, cov_size int[:] MT, MT2, NU, NU2 float2 *d__cov float2 *d__b float2 *d__c void setup(int, int, int, int, float *_) void cleanup() void MVM(float *, float *) <> @ \subsection{Class definitions} \label{sec:class-definitions} <>= cdef class Gbtbt: cdef: GBTBT *_c_GBTBT public int M, N, NT, NDFT, MT public cuFloatComplexArray cov, b, c public cuFloatArray e @ \section{PYX file} \label{sec:pyx-file} \index{GBTBT!python!Gbtbt} <>= cdef class Gbtbt: def __cinit__(self,int M, int N, int MT, int NT, cuFloatArray e): self._c_GBTBT = new GBTBT() self._c_GBTBT.setup(M,N,MT,NT,e._c_gpu.dev_data) self.M = self._c_GBTBT.M self.MT = MT self.N = self._c_GBTBT.N self.NT = self._c_GBTBT.NT self.NDFT = self._c_GBTBT.NDFT self.cov = cuFloatComplexArray(shape=(1,self.M*self.N*self.NDFT)) self.b = cuFloatComplexArray(shape=(1,self.N*self.NDFT)) self.c = cuFloatComplexArray(shape=(1,self.M*self.NDFT)) self.cov._c_gpu.dev_data = self._c_GBTBT.d__cov self.b._c_gpu.dev_data = self._c_GBTBT.d__b self.c._c_gpu.dev_data = self._c_GBTBT.d__c def MVM(self,float[:] x): cdef cuFloatArray __x,y __x = cuFloatArray(host_data=x) cdef int n y = cuFloatArray(shape=(self.MT*self.MT,1),dev_malloc=True) self._c_GBTBT.MVM(y._c_gpu.dev_data,__x._c_gpu.dev_data) return y def __dealloc__(self): self._c_GBTBT.cleanup()