Source code for snowdrop.src.preprocessor.f_sparse
from numba import njit
[docs]
@njit
def f_sparse(x, p, exog=[0], order=1, ind=None):
### This code was generated by Python.
### Monetary policy model example
# First order derivatives are employed in most of the models to compute Jacobian.
# Higher order derivatives are used in nonlinear rational expectations models.
from scipy.special import lambertw as LambertW
from snowdrop.src.preprocessor.functions import Heaviside,Max,Min,Abs,DiracDelta
from snowdrop.src.preprocessor.condition import IfThenElse,IfThen,Derivative,Subs,Positive,Negative,myzif
import numpy as np
from numpy import exp, sin, cos, tan, sqrt, sign, log
# Initialize variables
_xi_1 = 0
_xi_2 = 0
_xi_3 = 0
PDOT__p1_ = x[0]
PDOT__ = x[4]
RR__ = x[5]
RS__ = x[6]
Y__ = x[7]
PDOT__m1_ = x[8]
RR__m1_ = x[9]
Y__m1_ = x[11]
ey__ = x[12]
err__ = x[13]
ers__ = x[14]
epdot__ = x[15]
# Set parameters
g = p[0]
p_pdot1 = p[1]
p_pdot2 = p[2]
p_pdot3 = p[3]
p_rs1 = p[4]
p_y1 = p[5]
p_y2 = p[6]
p_y3 = p[7]
# Set exogenous variables
exo__ = exog[0]
# Function:
function = np.zeros(4)
function[0] = PDOT__ - (epdot__ + PDOT__m1_*(1 - p_pdot1) + PDOT__p1_*p_pdot1 + p_pdot3*(-g + g**2/(-Y__m1_ + g)) + (-g + g**2/(-Y__ + g))*p_pdot2)
function[1] = RR__ - (RS__ + err__ - PDOT__m1_*(1 - p_pdot1) - PDOT__p1_*p_pdot1)
function[2] = RS__ - (Y__ + ers__ + exo__ + p_rs1*PDOT__)
function[3] = Y__ - (ey__ + p_y1*Y__m1_ - p_y2*RR__ - p_y3*RR__m1_)
if order == 0:
return function
# Jacobian:
row_ind = []; col_ind = []; jacobian = []
row_ind.append(0); col_ind.append(0); jacobian.append(-p_pdot1)
row_ind.append(0); col_ind.append(4); jacobian.append(1)
row_ind.append(0); col_ind.append(7); jacobian.append(-g**2*p_pdot2/(-Y__ + g)**2)
row_ind.append(0); col_ind.append(8); jacobian.append(-1 + p_pdot1)
row_ind.append(0); col_ind.append(11); jacobian.append(-g**2*p_pdot3/(-Y__m1_ + g)**2)
row_ind.append(0); col_ind.append(15); jacobian.append(-1)
row_ind.append(1); col_ind.append(0); jacobian.append(p_pdot1)
row_ind.append(1); col_ind.append(5); jacobian.append(1)
row_ind.append(1); col_ind.append(6); jacobian.append(-1)
row_ind.append(1); col_ind.append(8); jacobian.append(1 - p_pdot1)
row_ind.append(1); col_ind.append(13); jacobian.append(-1)
row_ind.append(2); col_ind.append(4); jacobian.append(-p_rs1)
row_ind.append(2); col_ind.append(6); jacobian.append(1)
row_ind.append(2); col_ind.append(7); jacobian.append(-1)
row_ind.append(2); col_ind.append(14); jacobian.append(-1)
row_ind.append(3); col_ind.append(5); jacobian.append(p_y2)
row_ind.append(3); col_ind.append(7); jacobian.append(1)
row_ind.append(3); col_ind.append(9); jacobian.append(p_y3)
row_ind.append(3); col_ind.append(11); jacobian.append(-p_y1)
row_ind.append(3); col_ind.append(12); jacobian.append(-1)
if order == 1:
return [function, jacobian, row_ind, col_ind]