Skip to content

Commit

Permalink
streamline the B-spline interface
Browse files Browse the repository at this point in the history
  • Loading branch information
kingaa committed Dec 1, 2023
1 parent e236b7d commit 2940a85
Show file tree
Hide file tree
Showing 7 changed files with 10 additions and 54 deletions.
4 changes: 2 additions & 2 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
Package: pomp
Type: Package
Title: Statistical Inference for Partially Observed Markov Processes
Version: 5.4.3.2
Date: 2023-11-30
Version: 5.4.3.3
Date: 2023-12-01
Authors@R: c(person(given=c("Aaron","A."),family="King",role=c("aut","cre"),email="[email protected]",comment=c(ORCID="0000-0001-6159-3207")),
person(given=c("Edward","L."),family="Ionides",role="aut",comment=c(ORCID="0000-0002-4190-0174")) ,
person(given="Carles",family="Bretó",role="aut",comment=c(ORCID="0000-0003-4695-4902")),
Expand Down
22 changes: 4 additions & 18 deletions R/templates.R
Original file line number Diff line number Diff line change
Expand Up @@ -19,33 +19,19 @@ pomp_templates <- list(
),
utilities=list(
bspline_basis=list(
trigger=r"{(?<!periodic_)bspline_basis_eval(?!_deriv)}",
header=r"{
static bspline_basis_eval_t *__pomp_bspline_basis_eval;
#define bspline_basis_eval(X,K,P,N,Y) (__pomp_bspline_basis_eval((X),(K),(P),(N),(Y)))}",
reg=r"{
__pomp_bspline_basis_eval = (bspline_basis_eval_t *) R_GetCCallable("pomp","bspline_basis_eval");}"
),
bspline_basis_deriv=list(
trigger=r"{(?<!periodic_)bspline_basis_eval_deriv}",
trigger=r"{(?<!periodic_)bspline_basis_eval}",
header=r"{
static bspline_basis_eval_deriv_t *__pomp_bspline_basis_eval_deriv;
#define bspline_basis_eval(X,K,P,N,Y) (__pomp_bspline_basis_eval_deriv((X),(K),(P),(N),0,(Y)))
#define bspline_basis_eval_deriv(X,K,P,N,D,Y) (__pomp_bspline_basis_eval_deriv((X),(K),(P),(N),(D),(Y)))}",
reg=r"{
__pomp_bspline_basis_eval_deriv = (bspline_basis_eval_deriv_t *) R_GetCCallable("pomp","bspline_basis_eval_deriv");}"
),
periodic_bspline_basis=list(
trigger="periodic_bspline_basis_eval(?!_deriv)",
header=r"{
static periodic_bspline_basis_eval_t *__pomp_periodic_bspline_basis_eval;
#define periodic_bspline_basis_eval(X,T,P,N,Y) (__pomp_periodic_bspline_basis_eval((X),(T),(P),(N),(Y)))}",
reg=r"{
__pomp_periodic_bspline_basis_eval = (periodic_bspline_basis_eval_t *) R_GetCCallable("pomp","periodic_bspline_basis_eval");}"
),
periodic_bspline_basis_deriv=list(
trigger="periodic_bspline_basis_eval_deriv",
trigger="periodic_bspline_basis_eval",
header=r"{
static periodic_bspline_basis_eval_deriv_t *__pomp_periodic_bspline_basis_eval_deriv;
#define periodic_bspline_basis_eval(X,T,P,N,Y) (__pomp_periodic_bspline_basis_eval_deriv((X),(T),(P),(N),0,(Y)))
#define periodic_bspline_basis_eval_deriv(X,T,P,N,D,Y) (__pomp_periodic_bspline_basis_eval_deriv((X),(T),(P),(N),(D),(Y)))}",
reg=r"{
__pomp_periodic_bspline_basis_eval_deriv = (periodic_bspline_basis_eval_deriv_t *) R_GetCCallable("pomp","periodic_bspline_basis_eval_deriv");}"
Expand Down
9 changes: 0 additions & 9 deletions inst/include/pomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,11 @@
#define err(...) errorcall(R_NilValue,__VA_ARGS__)
#define warn(...) warningcall(R_NilValue,__VA_ARGS__)

typedef
void bspline_basis_eval_t
(double x, double *knots, int degree, int nbasis, double *y);

typedef
void bspline_basis_eval_deriv_t
(double x, double *knots, int degree,
int nbasis, int deriv, double *y);

typedef
void periodic_bspline_basis_eval_t
(double x, double period, int degree,
int nbasis, double *y);

typedef
void periodic_bspline_basis_eval_deriv_t
(double x, double period, int degree,
Expand Down
16 changes: 4 additions & 12 deletions src/bspline.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,27 +105,19 @@ SEXP periodic_bspline_basis (SEXP x, SEXP nbasis, SEXP degree, SEXP period,
return y;
}

// The following function computes value at x of all the nbasis
// B-spline basis functions of the specified degree with the given knots.
// The following function computes value at x of all the
// nbasis B-spline basis functions of
// the specified degree with the given knots.
// If deriv>0, the deriv-order derivative is given.
// 'knots' must point to an array of length nbasis+degree+1
// The results are stored in y.
void bspline_basis_eval (double x, double *knots, int degree,
int nbasis, double *y) {
bspline_basis_eval_deriv(x,knots,degree,nbasis,0,y);
}

void bspline_basis_eval_deriv (double x, double *knots, int degree,
int nbasis, int deriv, double *y) {
for (int i = 0; i < nbasis; i++) {
bspline_eval(&y[i],&x,1,i,degree,deriv,knots);
}
}

void periodic_bspline_basis_eval (double x, double period, int degree,
int nbasis, double *y) {
periodic_bspline_basis_eval_deriv(x,period,degree,nbasis,0,y);
}

void periodic_bspline_basis_eval_deriv (double x, double period, int degree,
int nbasis, int deriv, double *y)
{
Expand Down
2 changes: 0 additions & 2 deletions src/decls.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
extern void bspline_eval(double *y, const double *x, int nx, int i, int degree, int deriv, const double *knots);
extern SEXP bspline_basis(SEXP range, SEXP x, SEXP nbasis, SEXP degree, SEXP deriv);
extern SEXP periodic_bspline_basis(SEXP x, SEXP nbasis, SEXP degree, SEXP period, SEXP deriv);
extern void bspline_basis_eval(double x, double *knots, int degree, int nbasis, double *y);
extern void bspline_basis_eval_deriv(double x, double *knots, int degree, int nbasis, int deriv, double *y);
extern void periodic_bspline_basis_eval(double x, double period, int degree, int nbasis, double *y);
extern void periodic_bspline_basis_eval_deriv(double x, double period, int degree, int nbasis, int deriv, double *y);
/* src/dinit.c */
extern SEXP do_dinit(SEXP object, SEXP t0, SEXP x, SEXP params, SEXP log, SEXP gnsi);
Expand Down
2 changes: 0 additions & 2 deletions src/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,7 @@ static const R_CallMethodDef callMethods[] = {

void R_init_pomp (DllInfo *info) {
// C functions provided for users
R_RegisterCCallable("pomp","bspline_basis_eval",(DL_FUNC) &bspline_basis_eval);
R_RegisterCCallable("pomp","bspline_basis_eval_deriv",(DL_FUNC) &bspline_basis_eval_deriv);
R_RegisterCCallable("pomp","periodic_bspline_basis_eval",(DL_FUNC) &periodic_bspline_basis_eval);
R_RegisterCCallable("pomp","periodic_bspline_basis_eval_deriv",(DL_FUNC) &periodic_bspline_basis_eval_deriv);
R_RegisterCCallable("pomp","bspline_eval",(DL_FUNC) &bspline_eval); /* DEPRECATED */
R_RegisterCCallable("pomp","get_userdata",(DL_FUNC) &get_userdata);
Expand Down
9 changes: 0 additions & 9 deletions src/pomp.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,11 @@
#define err(...) errorcall(R_NilValue,__VA_ARGS__)
#define warn(...) warningcall(R_NilValue,__VA_ARGS__)

typedef
void bspline_basis_eval_t
(double x, double *knots, int degree, int nbasis, double *y);

typedef
void bspline_basis_eval_deriv_t
(double x, double *knots, int degree,
int nbasis, int deriv, double *y);

typedef
void periodic_bspline_basis_eval_t
(double x, double period, int degree,
int nbasis, double *y);

typedef
void periodic_bspline_basis_eval_deriv_t
(double x, double period, int degree,
Expand Down

0 comments on commit 2940a85

Please sign in to comment.