# Problem on arguments matching when using integrate_1d function

I want to use integrate_1d function to calculate the integral of a complex function. But I met an error when parsing it.

Here is the error:
Ill-typed arguments supplied to function ‘integrate_1d’. Available signatures:
((real, real, real[], data real[], data int[]) => real, real, real, real[], data real[], data int[]) => real
((real, real, real[], data real[], data int[]) => real, real, real, real[], data real[], data int[], data real) => real
Instead supplied arguments of incompatible type: (real, real, real[], real[], int[]) => real, real, real, real, real[,], int[].

This is my code. I think I have already put x_i into transformed data block, and use the variable in data for x_r. But I have no idea why there is such error. Is there any idea how to solve this problem?

``````functions {
real normal_density_nc(real x,          // Function argument
real xc,         // Complement of function argument
//  on the domain (defined later)
real[] theta,    // parameters
real[] x_r,      // data (real)
int[] x_i) {     // data (integer)
real mu = x_r[1];
real sigma = x_r[2];

return 1 / (sqrt(2 * pi()) * sigma) * exp(-0.5 * ((x - mu) / sigma)^2) * (-1/sigma + (1 / sigma ^ 2) * (x - mu)^2 );

}
}
data {

// Gaussian model
int W;                                                          // Number of weeks (typically 12)
int N;                                                          // Number of subjects
int Xdim;                                                       // Dimension of X - latent low dimensional structure of the phenotype

// Exogenous variables
int exo_q_num;                                                  // number of exogenous survey questions
real U[N,W,exo_q_num];                                       // exogenous survey questions - missing weeks were linearly interpolated outside of Stan

// Change detection
int<lower=1> W_nc_obs[N];                                          // Number of weeks WITH data
int<lower=0> W_nc_mis[N];                                          // Number of weeks WITHOUT data
int<lower=0> idx_nc_obs[N,W];                              // Indices of weeks WITH data
int<lower=1> P_nc;                                              // Number of parameters
int<lower=0> T_max_nc;                                          // Max number of trials across subjects across weeks
int<lower=0> Tr_nc[N, W];                                // Number of trials for each subj for each week
int deltaM[N, W, T_max_nc];                              // Mu of dots - subj x weeks x trials
real TotalS[N, W, T_max_nc];                             // Sd of dots - subj x weeks x trials
int choice_nc[N, W, T_max_nc];                           // choice nc - subj x weeks x trials

real reward[N, W];
int x_i[0];
}

//transformed data{

//}

parameters {
matrix[Xdim, exo_q_num] B;
real weber_nc_pr_std[N,W];                  // nc
matrix[1,Xdim] C;
matrix[N, Xdim] X1;
real<lower=0, upper=1> eta[N]; //eta
vector[1] mu_d;                     // constant offset
vector<lower=0>[1] sigma_r;
}

model {
to_vector(B) ~ normal(0, 0.1);
to_vector(C) ~ normal(0, 0.1);
to_vector(X1) ~ normal(0, 0.1);
mu_d ~ normal(0, 0.1);
sigma_r ~ normal(0, 0.1);
eta ~ normal(0.01, 0.1);// prior for eta

real weber_nc_pr[N,W];           // cd
real weber_nc[N,W];

real X[N,W,Xdim];

real reward_sum;

for (s in 1:N) {
reward_sum = 0;
int w1 = 1;
real weeks =0;
for (w in 1:W) {

reward_sum += reward[s, w];

if (idx_nc_obs[s,w] != 0) {
weeks = weeks + 1;
}

weber_nc_pr_std[s,w] ~ std_normal();

if (w == 1) {
X[s,w,] = to_array_1d(inv_logit(X1[s,]));
} else {
X[s,w,] = to_array_1d(inv_logit(to_vector(X[s,w1,]) + eta[s].*(reward[s, w] - reward_sum/(weeks + 0.0000001))* to_matrix(C)' * to_vector(nc_grad_sum[s, w1])));
}

weber_nc_pr[s,w] =  to_array_1d(mu_d[1] + B * to_vector(U[s,w,]) + C[1,] * to_vector(X[s,w,]) + sigma_r[1] * weber_nc_pr_std[s, w])[1];
weber_nc[s,w]= exp(weber_nc_pr[s,w]);          // nc

if (idx_nc_obs[s,w] != 0) {                                  // if week exists

vector[Tr_nc[s,w]] z = - to_vector(deltaM[s,w,:Tr_nc[s,w]]) ./ (weber_nc[s,w] * to_vector(TotalS[s,w,:Tr_nc[s,w]]));
choice_nc[s,w,:Tr_nc[s,w]] ~ bernoulli(Phi(z));

vector[Tr_nc[s,w]] itc_p = Phi(z);
vector[Tr_nc[s,w]] log_likelihood_p_grad_nc = to_vector(choice_nc[s,w,:Tr_nc[s,w]]) ./ (itc_p + 0.00001) - (1 - to_vector(choice_nc[s,w,:Tr_nc[s,w]])) ./ (1 - itc_p + 0.00001);

real theta[0];

for(t in 1: Tr_nc[s,w]){
negative_infinity(),
0.0,
weber_nc[s, w],
{ deltaM[s, w, t],  TotalS[s, w, t] },
x_i);
}