split up cython modules
[sddekit.git] / python / sys.pyx
blobc3e442c8d2eb824a76d8efbcec89b671645c3a39
1 # copyright 2016 Apache 2 sddekit authors
3 from sddekit_h cimport *
6 cdef uint32_t sys_py_ndim(sd_sys*s):
7 cdef object sys = <object> s.ptr
8 cdef uint32_t i = sys.ndim
9 return i
11 cdef uint32_t sys_py_ndc(sd_sys*s):
12 cdef object sys = <object> s.ptr
13 cdef uint32_t i = sys.ndc
14 return i
16 cdef uint32_t sys_py_nobs(sd_sys*s):
17 cdef object sys = <object> s.ptr
18 cdef uint32_t i = sys.nobs
19 return i
21 cdef uint32_t sys_py_nrpar(sd_sys*s):
22 cdef object sys = <object> s.ptr
23 cdef uint32_t i = sys.nrpar
24 return i
26 cdef uint32_t sys_py_nipar(sd_sys*s):
27 cdef object sys = <object> s.ptr
28 cdef uint32_t i = sys.nipar
29 return i
31 cdef sd_stat sys_py_apply(sd_sys *s, sd_sys_in *i, sd_sys_out *o):
32 cdef object sys = <object> s.ptr
33 # TODO conversions
34 #f, g, o = sys.apply(i.hist, i.rng, i.id, i.t, i.x, i.i)
35 # TODO conversions
36 """
37 o.f = f
38 o.g = g
39 o.o = o
40 """
41 return SD_OK
43 cdef void sys_py_free(sd_sys *s):
44 Py_DECREF(<object> s.ptr)
45 free(s)
48 cdef class Sys(object):
49 "Base class for system defintions, may be defined in C."
50 cdef sd_sys *sys
52 @property
53 def ndim(self):
54 return self.sys.ndim(self.sys)
56 @property
57 def ndc(self):
58 return self.sys.ndc(self.sys)
60 @property
61 def nobs(self):
62 return self.sys.nobs(self.sys)
64 @property
65 def nrpar(self):
66 return self.sys.nrpar(self.sys)
68 @property
69 def nipar(self):
70 return self.sys.nipar(self.sys)
72 def apply(self, hist, rng, id, t, x, i):
73 cdef:
74 sd_sys_in in_
75 sd_sys_out out_
76 raise NotImplementedError
78 def __del__(self):
79 self.sys.free(self.sys)
82 cdef object sys_of_ptr(sd_sys *s):
83 sys = Sys()
84 sys.s = s
85 return sys
88 cdef class PySys(Sys):
89 "Base class for systems defined in Python."
91 def __init__(self):
92 "Construct system defined by Python subclass."
93 if self.__class__.__name__ == 'PySys':
94 raise TypeError('PySys must be subclassed.')
95 self.s = <sd_sys *> malloc(sizeof(sd_sys))
96 Py_INCREF(self)
97 self.s.ptr = <void*> self
98 self.s.ndim = &sys_py_ndim
99 self.s.ndc = &sys_py_ndc
100 self.s.nobs = &sys_py_nobs
101 self.s.nrpar = &sys_py_nrpar
102 self.s.nipar = &sys_py_nipar
103 self.s.apply = &sys_py_apply
104 self.s.free = &sys_py_free