1 # copyright 2016 Apache 2 sddekit authors
3 # This file provides the Cython declarations for the C library
4 # defined in the C header. If you want to use the Cython types
5 # from Cython code, see sddekit.pxd.
7 from libc.stdlib cimport malloc, free
8 from cpython cimport PyObject, Py_INCREF, Py_DECREF
9 from libc.stdint cimport uint32_t
10 from libcpp cimport bool
12 cdef extern from "sddekit.h":
15 ctypedef enum sd_stat:
23 sd_stat sd_util_read_square_matrix(char *fname, uint32_t *n, double **w)
25 sd_stat sd_util_uniqi(uint32_t n,
32 ctypedef struct sd_rng:
34 void (*seed)(sd_rng*, uint32_t seed)
35 double (*norm)(sd_rng*)
36 void (*fill_norm)(sd_rng*, uint32_t n, double *x)
37 uint32_t (*nbytes)(sd_rng*)
40 sd_rng * sd_rng_new_default()
44 ctypedef struct sd_hfill:
46 sd_stat (*apply)(sd_hfill*, uint32_t n, double * t, uint32_t *indices, double * buf)
47 void (*free)(sd_hfill*)
49 sd_hfill * sd_hfill_new_val(double val)
53 ctypedef struct sd_hist:
54 uint32_t(*get_maxvi)(sd_hist*)
55 uint32_t(*get_vi2i)(sd_hist*, uint32_t vi)
56 uint32_t(*get_nu)(sd_hist *h)
57 void (*free)(sd_hist *h)
58 sd_stat (*fill)(sd_hist *h, sd_hfill *filler)
59 void (*get)(sd_hist *h, double t, double *aff)
60 void (*set)(sd_hist *h, double t, double *eff)
61 uint32_t (*nbytes)(sd_hist *h)
62 double (*get_buf_lin)(sd_hist *h, uint32_t index)
63 uint32_t (*get_nd)(sd_hist *h)
64 double (*get_t)(sd_hist *h)
65 double (*get_dt)(sd_hist *h)
66 uint32_t (*get_lim)(sd_hist *h, uint32_t i)
67 uint32_t (*get_len)(sd_hist *h, uint32_t i)
68 uint32_t (*get_pos)(sd_hist *h, uint32_t i)
69 uint32_t (*get_uvi)(sd_hist *h, uint32_t i)
70 double (*get_maxd)(sd_hist *h, uint32_t i)
71 uint32_t (*get_vi)(sd_hist *h, uint32_t i)
72 double (*get_vd)(sd_hist *h, uint32_t i)
74 sd_hist * sd_hist_new_default(uint32_t nd, uint32_t *vi, double *vd, double t0, double dt)
78 ctypedef struct sd_sys:
79 uint32_t (*ndim)(sd_sys*)
80 uint32_t (*ndc)(sd_sys*)
81 uint32_t (*nobs)(sd_sys*)
82 uint32_t (*nrpar)(sd_sys*)
83 uint32_t (*nipar)(sd_sys*)
84 sd_stat (*apply)(sd_sys*, sd_sys_in*, sd_sys_out*)
87 ctypedef struct sd_sys_in:
92 ctypedef struct sd_sys_out:
97 ctypedef struct sd_net:
98 sd_sys * ( * sys)(sd_net *d)
99 void (*free)(sd_net *d)
100 uint32_t (*get_n)(sd_net *net)
101 uint32_t (*get_m)(sd_net *net)
102 uint32_t (*get_nnz)(sd_net *net)
103 uint32_t *(*get_or)(sd_net *net)
104 uint32_t (*get_or_i)(sd_net *net, uint32_t i)
105 uint32_t *(*get_ic)(sd_net *net)
106 uint32_t (*get_ic_i)(sd_net *net, uint32_t i)
107 double *(*get_w)(sd_net *net)
108 double (*get_w_i)(sd_net *net, uint32_t i)
109 double *(*get_d)(sd_net *net)
110 double (*get_d_i)(sd_net *net, uint32_t i)
111 uint32_t (*get_ns)(sd_net *net)
112 uint32_t (*get_ne)(sd_net *net)
113 bool (*cn_is_null)(sd_net *net)
114 uint32_t (*get_Ms_i)(sd_net *net, uint32_t i)
115 uint32_t (*get_Ma_i)(sd_net *net, uint32_t i)
116 uint32_t (*get_Me_i)(sd_net *net, uint32_t i)
117 uint32_t (*get_M_i)(sd_net *net, uint32_t i)
118 sd_sys * (*get_models_i)(sd_net *net, uint32_t i)
119 bool (*get__init1)(sd_net *net)
120 sd_net* sd_net_new_het(uint32_t n, uint32_t m, uint32_t * M, uint32_t * Ms,
121 uint32_t * Ma, uint32_t * Me,
123 uint32_t nnz, uint32_t * Or, uint32_t * Ic,
124 double * w, double * d)
125 sd_net * sd_net_new_hom(uint32_t n, sd_sys *sys,
126 uint32_t ns, uint32_t na, uint32_t ne, uint32_t nnz,
133 # vim: sw=4 et foldmethod=marker