multi-file pyx ext non-trivial
[sddekit.git] / python / sddekit_h.pxd
blobfa4bb58f470fbe02f32ede06b6ddad2de6e98968
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":
14     # stat enum {{{
15     ctypedef enum sd_stat:
16         SD_OK
17         SD_ERR
18         SD_CONT
19         SD_STOP
20     # }}}
22     # util {{{
23     sd_stat sd_util_read_square_matrix(char *fname, uint32_t *n, double **w)
25     sd_stat sd_util_uniqi(uint32_t n,
26                   uint32_t * ints, 
27                   uint32_t * nuniq, 
28                   uint32_t **uints)
29     # }}}
31     # rng {{{
32     ctypedef struct sd_rng:
33         void *ptr
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*)
38         void (*free)(sd_rng*)
40     sd_rng * sd_rng_new_default()
41     # }}}
43     # hfill {{{
44     ctypedef struct sd_hfill:
45         void *ptr
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)
50     # }}}
52     # hist {{{
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)
75     # }}}
77     # sys {{{
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*)
85         void (*free)(sd_sys*)
86         void *ptr
87     ctypedef struct sd_sys_in:
88         uint32_t nx, nc, id
89         double t, *x, *i 
90         sd_hist *hist
91         sd_rng *rng
92     ctypedef struct sd_sys_out:
93         double *f, *g, *o
94     # sys }}}
96     # net {{{
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, 
122            sd_sys **models,
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, 
127                 uint32_t * Or,
128                 uint32_t * Ic, 
129                 double * w,
130                 double * d)
131     # net }}}
133 # vim: sw=4 et foldmethod=marker