blob: 9067a0eac98381c64bf84b9ef36f1e8c3dad65a9 [file] [log] [blame]
/*
* R : A Computer Language for Statistical Data Analysis
* Copyright (C) 2001-2017 The R Core Team.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, a copy is available at
* https://www.R-project.org/Licenses/
*/
#include "modreg.h"
#include "nls.h"
#include "port.h"
#include "stats.h"
#include "statsR.h"
#include "ts.h"
#include <R_ext/Rdynload.h>
#include <R_ext/Visibility.h>
#define C_DEF(name, n) {#name, (DL_FUNC) &name, n}
static const R_CMethodDef CEntries[] = {
C_DEF(loess_raw, 24),
C_DEF(loess_dfit, 13),
C_DEF(loess_dfitse, 16),
C_DEF(loess_ifit, 8),
C_DEF(loess_ise, 15),
C_DEF(multi_burg, 11),
C_DEF(multi_yw, 10),
C_DEF(HoltWinters, 17),
C_DEF(kmeans_Lloyd, 9),
C_DEF(kmeans_MacQueen, 9),
C_DEF(rcont2, 8),
{NULL, NULL, 0}
};
#define CALLDEF(name, n) {#name, (DL_FUNC) &name, n}
#define CALLDEF_DO(name, n) {#name, (DL_FUNC) &do_##name, n}
#define CALLDEF_MATH2_1(name) CALLDEF_DO(name, 3)
#define CALLDEF_MATH2_2(name) CALLDEF_DO(name, 4)
#define CALLDEF_MATH3_1(name) CALLDEF_DO(name, 4)
#define CALLDEF_MATH3_2(name) CALLDEF_DO(name, 5)
#define CALLDEF_MATH4_1(name) CALLDEF_DO(name, 5)
#define CALLDEF_MATH4_2(name) CALLDEF_DO(name, 6)
#define CALLDEF_RAND1(name) CALLDEF_DO(name, 2)
#define CALLDEF_RAND2(name) CALLDEF_DO(name, 3)
#define CALLDEF_RAND3(name) CALLDEF_DO(name, 4)
static const R_CallMethodDef CallEntries[] = {
CALLDEF(cutree, 2),
CALLDEF(isoreg, 1),
CALLDEF(monoFC_m, 2),
CALLDEF(numeric_deriv, 4),
CALLDEF(nls_iter, 3),
CALLDEF(setup_starma, 8),
CALLDEF(free_starma, 1),
CALLDEF(set_trans, 2),
CALLDEF(arma0fa, 2),
CALLDEF(get_s2, 1),
CALLDEF(get_resid, 1),
CALLDEF(Dotrans, 2),
CALLDEF(arma0_kfore, 4),
CALLDEF(Starma_method, 2),
CALLDEF(Invtrans, 2),
CALLDEF(Gradtrans, 2),
CALLDEF(ARMAtoMA, 3),
CALLDEF(KalmanLike, 5),
CALLDEF(KalmanFore, 3),
CALLDEF(KalmanSmooth, 3),
CALLDEF(ARIMA_undoPars, 2),
CALLDEF(ARIMA_transPars, 3),
CALLDEF(ARIMA_Invtrans, 2),
CALLDEF(ARIMA_Gradtrans, 2),
CALLDEF(ARIMA_Like, 4),
CALLDEF(ARIMA_CSS, 6),
CALLDEF(TSconv, 2),
CALLDEF(getQ0, 2),
CALLDEF(getQ0bis, 3),
CALLDEF(port_ivset, 3),
CALLDEF(port_nlminb, 9),
CALLDEF(port_nlsb, 7),
CALLDEF(logit_link, 1),
CALLDEF(logit_linkinv, 1),
CALLDEF(logit_mu_eta, 1),
CALLDEF(binomial_dev_resids, 3),
CALLDEF(rWishart, 3),
CALLDEF(Cdqrls, 4),
CALLDEF(Cdist, 4),
CALLDEF(cor, 4),
CALLDEF(cov, 4),
CALLDEF(updateform, 2),
CALLDEF(fft, 2),
CALLDEF(mvfft, 2),
CALLDEF(nextn, 2),
CALLDEF(r2dtable, 3),
CALLDEF(cfilter, 4),
CALLDEF(rfilter, 3),
CALLDEF(lowess, 5),
CALLDEF(DoubleCentre, 1),
CALLDEF(BinDist, 5),
CALLDEF(Rsm, 3),
CALLDEF(tukeyline, 4),
CALLDEF(runmed, 6),
CALLDEF(influence, 4),
CALLDEF(pSmirnov2x, 3),
CALLDEF(pKolmogorov2x, 2),
CALLDEF(pKS2, 2),
CALLDEF(ksmooth, 5),
CALLDEF(SplineCoef, 3),
CALLDEF(SplineEval, 2),
CALLDEF(Approx, 7),
CALLDEF(ApproxTest, 4),
CALLDEF(LogLin, 7),
CALLDEF(pAnsari, 3),
CALLDEF(qAnsari, 3),
CALLDEF(pKendall, 2),
CALLDEF(pRho, 3),
CALLDEF(SWilk, 1),
CALLDEF(bw_den, 2),
CALLDEF(bw_den_binned, 1),
CALLDEF(bw_ucv, 4),
CALLDEF(bw_bcv, 4),
CALLDEF(bw_phi4, 4),
CALLDEF(bw_phi6, 4),
CALLDEF(acf, 3),
CALLDEF(pacf1, 2),
CALLDEF(ar2ma, 2),
CALLDEF(Burg, 2),
CALLDEF(intgrt_vec, 3),
CALLDEF(pp_sum, 2),
CALLDEF(Fexact, 4),
CALLDEF(Fisher_sim, 3),
CALLDEF(chisq_sim, 4),
CALLDEF(d2x2xk, 5),
CALLDEF_MATH2_1(dchisq),
CALLDEF_MATH2_1(dexp),
CALLDEF_MATH2_1(dgeom),
CALLDEF_MATH2_1(dpois),
CALLDEF_MATH2_1(dt),
CALLDEF_MATH2_1(dsignrank),
CALLDEF_MATH2_2(pchisq),
CALLDEF_MATH2_2(qchisq),
CALLDEF_MATH2_2(pexp),
CALLDEF_MATH2_2(qexp),
CALLDEF_MATH2_2(pgeom),
CALLDEF_MATH2_2(qgeom),
CALLDEF_MATH2_2(ppois),
CALLDEF_MATH2_2(qpois),
CALLDEF_MATH2_2(pt),
CALLDEF_MATH2_2(qt),
CALLDEF_MATH2_2(psignrank),
CALLDEF_MATH2_2(qsignrank),
CALLDEF_MATH3_1(dbeta),
CALLDEF_MATH3_1(dbinom),
CALLDEF_MATH3_1(dcauchy),
CALLDEF_MATH3_1(df),
CALLDEF_MATH3_1(dgamma),
CALLDEF_MATH3_1(dlnorm),
CALLDEF_MATH3_1(dlogis),
CALLDEF_MATH3_1(dnbinom),
CALLDEF_MATH3_1(dnbinom_mu),
CALLDEF_MATH3_1(dnorm),
CALLDEF_MATH3_1(dweibull),
CALLDEF_MATH3_1(dunif),
CALLDEF_MATH3_1(dnt),
CALLDEF_MATH3_1(dnchisq),
CALLDEF_MATH3_1(dwilcox),
CALLDEF_MATH3_2(pbeta),
CALLDEF_MATH3_2(qbeta),
CALLDEF_MATH3_2(pbinom),
CALLDEF_MATH3_2(qbinom),
CALLDEF_MATH3_2(pcauchy),
CALLDEF_MATH3_2(qcauchy),
CALLDEF_MATH3_2(pf),
CALLDEF_MATH3_2(qf),
CALLDEF_MATH3_2(pgamma),
CALLDEF_MATH3_2(qgamma),
CALLDEF_MATH3_2(plnorm),
CALLDEF_MATH3_2(qlnorm),
CALLDEF_MATH3_2(plogis),
CALLDEF_MATH3_2(qlogis),
CALLDEF_MATH3_2(pnbinom),
CALLDEF_MATH3_2(qnbinom),
CALLDEF_MATH3_2(pnbinom_mu),
CALLDEF_MATH3_2(qnbinom_mu),
CALLDEF_MATH3_2(pnorm),
CALLDEF_MATH3_2(qnorm),
CALLDEF_MATH3_2(pweibull),
CALLDEF_MATH3_2(qweibull),
CALLDEF_MATH3_2(punif),
CALLDEF_MATH3_2(qunif),
CALLDEF_MATH3_2(pnt),
CALLDEF_MATH3_2(qnt),
CALLDEF_MATH3_2(pnchisq),
CALLDEF_MATH3_2(qnchisq),
CALLDEF_MATH3_2(pwilcox),
CALLDEF_MATH3_2(qwilcox),
// {"qnbinom_mu", (DL_FUNC) &distn3, 5}, // exists but currently unused
CALLDEF_MATH4_1(dhyper),
CALLDEF_MATH4_1(dnbeta),
CALLDEF_MATH4_1(dnf),
CALLDEF_MATH4_2(phyper),
CALLDEF_MATH4_2(qhyper),
CALLDEF_MATH4_2(pnbeta),
CALLDEF_MATH4_2(qnbeta),
CALLDEF_MATH4_2(pnf),
CALLDEF_MATH4_2(qnf),
CALLDEF_MATH4_2(ptukey),
CALLDEF_MATH4_2(qtukey),
CALLDEF_RAND1(rchisq),
CALLDEF_RAND1(rexp),
CALLDEF_RAND1(rgeom),
CALLDEF_RAND1(rpois),
CALLDEF_RAND1(rt),
CALLDEF_RAND1(rsignrank),
CALLDEF_RAND2(rbeta),
CALLDEF_RAND2(rbinom),
CALLDEF_RAND2(rcauchy),
CALLDEF_RAND2(rf),
CALLDEF_RAND2(rgamma),
CALLDEF_RAND2(rlnorm),
CALLDEF_RAND2(rlogis),
CALLDEF_RAND2(rnbinom),
CALLDEF_RAND2(rnorm),
CALLDEF_RAND2(runif),
CALLDEF_RAND2(rweibull),
CALLDEF_RAND2(rwilcox),
CALLDEF_RAND2(rnchisq),
CALLDEF_RAND2(rnbinom_mu),
CALLDEF_RAND3(rhyper),
CALLDEF_DO(rmultinom, 3),
{NULL, NULL, 0}
};
#define FDEF(name) {#name, (DL_FUNC) &F77_NAME(name), sizeof(name ## _t)/sizeof(name ## _t[0]), name ##_t}
static R_NativePrimitiveArgType lowesw_t[] = {
REALSXP, INTSXP, REALSXP, INTSXP};
static R_NativePrimitiveArgType lowesp_t[] = {
INTSXP, REALSXP, REALSXP, REALSXP, REALSXP, INTSXP, REALSXP};
static const R_FortranMethodDef FortEntries[] = {
FDEF(lowesw),
FDEF(lowesp),
{"setppr", (DL_FUNC) &F77_NAME(setppr), 6},
{"smart", (DL_FUNC) &F77_NAME(smart), 16},
{"pppred", (DL_FUNC) &F77_NAME(pppred), 5},
{"setsmu", (DL_FUNC) &F77_NAME(setsmu), 1},
{"rbart", (DL_FUNC) &F77_NAME(rbart), 20},
{"bvalus", (DL_FUNC) &F77_NAME(bvalus), 7},
{"supsmu", (DL_FUNC) &F77_NAME(supsmu), 10},
{"hclust", (DL_FUNC) &F77_NAME(hclust), 10},
{"hcass2", (DL_FUNC) &F77_NAME(hcass2), 6},
{"kmns", (DL_FUNC) &F77_NAME(kmns), 17},
{"eureka", (DL_FUNC) &F77_NAME(eureka), 6},
{"stl", (DL_FUNC) &F77_NAME(stl), 18},
{NULL, NULL, 0}
};
#define EXTDEF(name, n) {#name, (DL_FUNC) &name, n}
// These argument counts are not checked
static const R_ExternalMethodDef ExtEntries[] = {
EXTDEF(compcases, -1),
EXTDEF(doD, 2),
EXTDEF(deriv, 5),
EXTDEF(modelframe, 8),
EXTDEF(modelmatrix, 2),
EXTDEF(termsform, 5),
EXTDEF(do_fmin, 4),
EXTDEF(nlm, 11),
EXTDEF(zeroin2, 7),
EXTDEF(optim, 7),
EXTDEF(optimhess, 4),
EXTDEF(call_dqags, 7),
EXTDEF(call_dqagi, 7),
{"signrank_free", (DL_FUNC) &stats_signrank_free, 0},
{"wilcox_free", (DL_FUNC) &stats_wilcox_free, 0},
{NULL, NULL, 0}
};
void attribute_visible R_init_stats(DllInfo *dll)
{
R_registerRoutines(dll, CEntries, CallEntries, FortEntries, ExtEntries);
R_useDynamicSymbols(dll, FALSE);
R_forceSymbols(dll, TRUE);
R_RegisterCCallable("stats", "nlminb_iterate", (DL_FUNC) nlminb_iterate);
R_RegisterCCallable("stats", "nlsb_iterate", (DL_FUNC) nlsb_iterate);
R_RegisterCCallable("stats", "Rf_divset", (DL_FUNC) Rf_divset);
R_RegisterCCallable("stats", "rcont2", (DL_FUNC) rcont2);
}