julia: first draft: call preprocessor, define model, utils

time-shift
Houtan Bastani 2015-07-21 16:03:59 +02:00
parent 1a2dbdc4d8
commit 5b7acbf514
3 changed files with 201 additions and 0 deletions

43
julia/Dynare.jl Normal file
View File

@ -0,0 +1,43 @@
module Dynare
##
# Copyright (C) 2015 Dynare Team
#
# This file is part of Dynare.
#
# Dynare 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 3 of the License, or
# (at your option) any later version.
#
# Dynare 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 Dynare. If not, see <http://www.gnu.org/licenses/>.
##
export dynare
function dynare(modfile)
# Process modfile
println(string("Using ", WORD_SIZE, "-bit preprocessor"))
preprocessor = string(dirname(@__FILE__()), "/preprocessor", WORD_SIZE, "/dynare_m")
run(`$preprocessor $modfile`)
# Temporary: clean up Matlab output
basename = split(modfile, ".mod", false)
mfiles = filter(r".*\.m", readdir())
for file in mfiles
if isempty(search(file, ".mod"))
rm(file)
end
end
rm(basename[1], recursive=true)
# Load module created by preprocessor
require(basename[1])
end
end

122
julia/model.jl Normal file
View File

@ -0,0 +1,122 @@
module model
##
# Copyright (C) 2015 Dynare Team
#
# This file is part of Dynare.
#
# Dynare 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 3 of the License, or
# (at your option) any later version.
#
# Dynare 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 Dynare. If not, see <http://www.gnu.org/licenses/>.
##
export modeldescription
type modeldescription
fname::ASCIIString
dname::ASCIIString
exonames::Array{ASCIIString,1}
tex_exonames::Array{ASCIIString,1}
long_exonames::Array{ASCIIString,1}
exodetnames::Array{ASCIIString,1}
tex_exodetnames::Array{ASCIIString,1}
long_exodetnames::Array{ASCIIString,1}
endonames::Array{ASCIIString,1}
tex_endonames::Array{ASCIIString,1}
long_endonames::Array{ASCIIString,1}
paramnames::Array{ASCIIString,1}
tex_paramnames::Array{ASCIIString,1}
long_paramnames::Array{ASCIIString,1}
aux_vars::Array{ASCIIString,1}
exo_nbr::Int
endo_nbr::Int
param_nbr::Int
orig_endo_nbr::Int
orig_eq_nbr::Int
eq_nbr::Int
ramsey_eq_nbr::Int
nstatic::Int
nfwrd::Int
npred::Int
nboth::Int
nsfwrd::Int
nspred::Int
ndynamic::Int
maximum_lag::Int
maximum_lead::Int
maximum_endo_lag::Int
maximum_endo_lead::Int
maximum_exo_lag::Int
maximum_exo_lead::Int
lead_lag_incidence::Matrix{Int}
NNZDerivatives::Vector{Int}
static_and_dynamic_models_differ::Bool
equations_tags::Array{ASCIIString,1}
exo_names_orig_ord::Array{Int, 1}
Sigma_e::Matrix{Float64}
Correlation_matrix::Matrix{Float64}
H::Matrix{Float64}
Correlation_matrix_ME::Matrix{Float64}
sigma_e_is_diagonal::Bool
params::Vector{Float64}
end
function modeldescription()
return modeldescription("", # fname
"", # dname
Array(ASCIIString,0), # exonames
Array(ASCIIString,0), # t_exonames
Array(ASCIIString,0), # l_exonames
Array(ASCIIString,0), # exodetnames
Array(ASCIIString,0), # t_exodetnames
Array(ASCIIString,0), # l_exodetnames
Array(ASCIIString,0), # endonames
Array(ASCIIString,0), # t_endonames
Array(ASCIIString,0), # l_endonames
Array(ASCIIString,0), # paramnames
Array(ASCIIString,0), # t_paramnames
Array(ASCIIString,0), # l_paramnames
Array(ASCIIString,0), # aux_vars
0, # exo_nbr
0, # endo_nbr
0, # param_nbr
0, # orig_endo_nbr
0, # orig_eq_nbr
0, # eq_nbr
0, # ramsey_eq_nbr
0, # nstatic
0, # nfwrd
0, # npred
0, # nboth
0, # nsfwrd
0, # nspred
0, # ndynamic
0, # maximum_lag
0, # maximum_lead
0, # maximum_endo_lag
0, # maximum_endo_lead
0, # maximum_exo_lag
0, # maximum_exo_lead
Array(Int, 3, 0), # lead_lag_incidence
zeros(Int, 3), # NNZDerivatives
false, # static_and_dynamic_models_differ
Array(ASCIIString,0), # equations_tags
Array(Int64,1), # exo_names_orig_ord
Array(Float64, 0, 0), # Sigma_e (Covariance matrix of the structural innovations)
Array(Float64, 0, 0), # Correlation_matrix (Correlation matrix of the structural innovations)
Array(Float64, 0, 0), # H (Covariance matrix of the measurement errors)
Array(Float64, 0, 0), # Correlation_matrix_ME (Covariance matrixof the measurement errors)
true, # sigma_e_is_diagonal
Array(Float64, 0) # params
)
end
end

36
julia/utils.jl Normal file
View File

@ -0,0 +1,36 @@
module utils
##
# Copyright (C) 2015 Dynare Team
#
# This file is part of Dynare.
#
# Dynare 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 3 of the License, or
# (at your option) any later version.
#
# Dynare 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 Dynare. If not, see <http://www.gnu.org/licenses/>.
##
export getPowerDeriv
function getPowerDeriv(x::Float64, p::Real, k::Int)
if abs(x)<1e-12 && p>0 && k>p && typeof(p)==Int
dxp = .0
else
dxp = x^(p-k)
for i = 0:k-1
dxp *= p
p -= 1
end
end
return dxp
end
end