Preprocessor update

— Bug fix: allow external functions in model local variables (also add corresponding
  integration test)
— JSON output:
  + do not append two underscores after model local variable names in their
    definition
  + when writing the model after computing pass, use TEF terms for (not
    derived) external functions
  + write model local variables in parsed model (modfile.json) (Closes: #1723)
— In the driver file, provide mapping between model local variables and indices
  in the temporary terms vector (Closes: #1722)
time-shift
Sébastien Villemot 2020-06-05 17:16:11 +02:00
parent 1d172528d7
commit d0fb9ce5b8
No known key found for this signature in database
GPG Key ID: 2CECE9350ECEBE4A
3 changed files with 49 additions and 1 deletions

@ -1 +1 @@
Subproject commit 050f1cdd74c92eb7c65c7151980ce5c411fed378
Subproject commit d530ccd012cb6b66f778b88d638c4f9513a177e5

View File

@ -192,6 +192,7 @@ MODFILES = \
external_function/first_and_2nd_deriv_given_dll_namespace.mod \
external_function/no_deriv_given.mod \
external_function/no_deriv_given_dll.mod \
external_function/extfun_in_mlv.mod \
seeds.mod \
minimal_state_space_system/as2007_minimal.mod \
minimal_state_space_system/sw_minimal.mod \

View File

@ -0,0 +1,47 @@
// Tests the presence of an external function call in a model local variable
var y, c, k, a, h, b;
varexo e, u;
parameters beta, rho, alpha, delta, theta, psi, tau;
alpha = 0.36;
rho = 0.95;
tau = 0.025;
beta = 0.99;
delta = 0.025;
psi = 0;
theta = 2.95;
phi = 0.1;
external_function(nargs=2, name=extFunNoDerivs, first_deriv_provided=extFunDeriv);
model;
# foo = extFunNoDerivs((1-delta),k(-1));
c*theta*h^(1+psi)=(1-alpha)*y;
k = beta*(((exp(b)*c)/(exp(b(+1))*c(+1)))
*(exp(b(+1))*alpha*y(+1)+(1-delta)*k));
y = exp(a)*(k(-1)^alpha)*(h^(1-alpha));
k = exp(b)*(y-c)+foo;
a = rho*a(-1)+tau*b(-1) + e;
b = tau*a(-1)+rho*b(-1) + u;
end;
initval;
y = 1.08068253095672;
c = 0.80359242014163;
h = 0.29175631001732;
k = 11.08360443260358;
a = 0;
b = 0;
e = 0;
u = 0;
end;
shocks;
var e; stderr 0.009;
var u; stderr 0.009;
var e, u = phi*0.009*0.009;
end;
stoch_simul;