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
11 cdef uint32_t sys_py_ndc
(sd_sys
*s
):
12 cdef object sys
= <object> s
.ptr
13 cdef uint32_t i
= sys
.ndc
16 cdef uint32_t sys_py_nobs
(sd_sys
*s
):
17 cdef object sys
= <object> s
.ptr
18 cdef uint32_t i
= sys
.nobs
21 cdef uint32_t sys_py_nrpar
(sd_sys
*s
):
22 cdef object sys
= <object> s
.ptr
23 cdef uint32_t i
= sys
.nrpar
26 cdef uint32_t sys_py_nipar
(sd_sys
*s
):
27 cdef object sys
= <object> s
.ptr
28 cdef uint32_t i
= sys
.nipar
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
34 #f, g, o = sys.apply(i.hist, i.rng, i.id, i.t, i.x, i.i)
43 cdef void sys_py_free
(sd_sys
*s
):
44 Py_DECREF
(<object> s
.ptr
)
48 cdef class Sys
(object):
49 "Base class for system defintions, may be defined in C."
54 return self.sys
.ndim
(self.sys
)
58 return self.sys
.ndc
(self.sys
)
62 return self.sys
.nobs
(self.sys
)
66 return self.sys
.nrpar
(self.sys
)
70 return self.sys
.nipar
(self.sys
)
72 def apply(self, hist
, rng
, id, t
, x
, i
):
76 raise NotImplementedError
79 self.sys
.free
(self.sys
)
82 cdef object sys_of_ptr
(sd_sys
*s
):
88 cdef class PySys
(Sys
):
89 "Base class for systems defined in Python."
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
))
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