Commit a22f1b56 authored by Stéphane Adjemian's avatar Stéphane Adjemian
Browse files

Merge branch 'master' into sphinx-doc-experimental

Conflicts:
	matlab/utilities/tests
parents 5a1d4853 905076fa
......@@ -2,6 +2,4 @@
((c-file-style . "gnu")
(indent-tabs-mode . nil)
(fill-column . 79)))
(makefile-mode . ((indent-tabs-mode . t)))
(matlab-mode . ((matlab-indent-level . 4)
(matlab-indent-function-body . nil))))
(makefile-mode . ((indent-tabs-mode . t)))
\ No newline at end of file
......@@ -194,6 +194,8 @@ mex/build/matlab/run_m2html.m
/contrib/ms-sbvar/*.dat
/contrib/ms-sbvar/sbvar_commandline
/contrib/ms-sbvar/sbvar_init_file
/tests/ms-sbvar/*.tmp
# Reporting
*synctex.gz
\ No newline at end of file
*synctex.gz
tests/reporting/tmpRepDir
......@@ -10,3 +10,14 @@
[submodule "contrib/dmm"]
path = contrib/dmm
url = http://www.dynare.org/git/dmm.git
[submodule "matlab/utilities/tests"]
path = matlab/utilities/tests
url = https://github.com/DynareTeam/m-unit-tests.git
[submodule "matlab/modules/dates"]
path = matlab/modules/dates
url = https://github.com/DynareTeam/dates.git
branch = old-oop-syntax
[submodule "matlab/modules/dseries"]
path = matlab/modules/dseries
url = https://github.com/DynareTeam/dseries.git
branch = old-oop-style
Announcement for Dynare 4.4.3 (on 2014-07-31)
=============================================
We are pleased to announce the release of Dynare 4.4.3.
This is a bugfix release.
The Windows packages are already available for download at:
http://www.dynare.org/download/dynare-stable
The Mac and GNU/Linux packages (for Debian and Ubuntu LTS) should follow soon.
This release is compatible with MATLAB versions 7.3 (R2006b) to 8.2 (R2013b)
and with GNU Octave versions 3.6 to 3.8.
Here is a list of the problems identified in version 4.4.2 and that have been
fixed in version 4.4.3:
- When loading a dataset in XLS, XLSX or CSV format, the first
observation was discarded.
- Reading data in an Excel-file with only one variable wasz leading
to a crash.
- When using the k_order_perturbation option (which is implicit at
3rd order) without the use_dll option, crashes or unexpected
behavior could happen if some 2nd or 3rd derivative evaluates to
zero (while not being symbolically zero)
- When using external function, Ramsey policy could crash or return
wrong results.
- For Ramsey policy, the equation numbers associated with the
Lagrange multipliers stored in M_.aux_vars were erroneously one too
low
- When updating deep parameters in the steady state file, the changes
were not fully taken into account (this was only affecting the
Ramsey policy).
- When using external functions and the bytecode option, wrong
results were returned (if second order derivates of the external
functions were needed).
- The confidence level for computations in estimation, conf_sig could
not be changed and was fixed at 0.9. The new option mh_conf_sig is
now used to set this interval
- Conditional forecasts with non-diagonal covariance matrix used an
incorrect decomposition of the covariance matrix. A Cholesky
factorization is used.
- Option geweke_interval was not effective, Dynare always defaulted
to the standard value.
- The mode_file option lacked backward compatibility with older
Dynare versions.
- Loading an mh_mode file with the mode_file option was broken.
- Using identification with var_exo_det leaded to crashes (the
preprocessor now returns an error if they are used simultaneously)
- The identification command did not print results if the initial
parameter set was invalid and then crashed later on if the MC
sample is bigger than 1
- Inconsistencies between static and dynamic models leaded to crashes
instead of error messages (only with block option).
- The use of external functions crashed the preprocessor when the
derivatives of the external function are explicitly called in the
model block. The preprocessor now forbids the use of external
functions derivates in the model block.
- Using the block option when a variable does not appear in the
current period crashed Dynare instead of providing an error
message.
Announcement for Dynare 4.4.2 (on 2014-03-04)
=============================================
......
......@@ -49,7 +49,7 @@ A number of tools and libraries are needed in order to recompile everything. You
- A POSIX compliant shell and an implementation of Make (mandatory)
- The [GNU Compiler Collection](http://gcc.gnu.org/), with gcc, g++ and gfortran (mandatory)
- [MATLAB](http://www.dynare.org/DynareWiki/BuildingDynareFromSource?action=AttachFile&do=view&target=dynare-mingw64-libs.zip) (if you want to compile MEX for MATLAB)
- MATLAB (if you want to compile MEX for MATLAB)
- [GNU Octave](http://www.octave.org), with the development headers (if you want to compile MEX for Octave)
- [Boost libraries](http://www.boost.org), version 1.36 or later
- [Bison](http://www.gnu.org/software/bison/), version 2.5 or later (only if you get the source through Git)
......@@ -194,8 +194,8 @@ The following instructions are compatible with MATLAB or with Octave/MinGW (as d
- `mingw64-i686-gcc-core`, `mingw64-i686-gcc-g++`, `mingw64-i686-gcc-fortran` (if you have Octave/MinGW or if you have MATLAB 32-bit)
- `mingw64-x86_64-gcc-core`, `mingw64-x86_64-gcc-g++`, `mingw64-x86_64-gcc-fortran` (if you have MATLAB 64-bit)
- Second, install precompiled librairies for BLAS, LAPACK, Boost and GSL:
- If you have Octave or MATLAB 32-bit, download [dynare-mingw32-libs.zip](http://www.dynare.org/DynareWiki/BuildingDynareFromSource?action=AttachFile&do=view&target=dynare-mingw32-libs.zip), and uncompress it in `c:\cygwin\usr\local\lib\mingw32`
- If you have MATLAB 64-bit, download [dynare-mingw64-libs.zip](http://www.dynare.org/DynareWiki/BuildingDynareFromSource?action=AttachFile&do=view&target=dynare-mingw64-libs.zip), and uncompress it in `c:\cygwin\usr\local\lib\mingw64`
- If you have Octave or MATLAB 32-bit, download [dynare-mingw32-libs.zip](http://www.dynare.org/build/dynare-mingw32-libs.zip), and uncompress it in `c:\cygwin\usr\local\lib\mingw32`
- If you have MATLAB 64-bit, download [dynare-mingw64-libs.zip](http://www.dynare.org/build/dynare-mingw64-libs.zip), and uncompress it in `c:\cygwin\usr\local\lib\mingw64`
*Remark*: You need to make sure that Cygwin’s git is used and not a potentially installed msysgit. The latter typically happens when one installs msysgit and allows it to set a system path. This will result in wrong line endings and cryptic error messages à la "syntax error near unexpected token `fi'". In that case it might be necessary to uninstall msysgit and reinstall it without setting a system path.
......@@ -251,35 +251,34 @@ Configure and make:
## Mac OS X
- Install the Xcode Common Tools:
- Install [Xcode](http://developer.apple.com/xcode/) from the App Store
- Open Xcode
- Go to `Xcode->Preferences...`
- In the window that opens, click on the `Downloads` tab
- In the tab that appears, click on the `Components` button
- Next to `Command Line Tools`, click on `Install`
- Download [MacOSX10.6.sdk.zip](http://www.jamesgeorge.org/uploads/MacOSX10.6.sdk.zip) and unzip it in `/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs`. Change the owner to be `root` and the group to be `wheel`
- Install the Xcode Command Line Tools:
- Download "Command Line Tools (OS X 10.X) for Xcode," where 10.X corresponds to your OS X version, from https://developer.apple.com/downloads/index.action
- Install [Homebrew](http://mxcl.github.io/homebrew/) by following the instructions on the website
- Tap [Homebrew Science](https://github.com/Homebrew/homebrew-science) by doing:
- Tap [Homebrew Science](https://github.com/Homebrew/homebrew-science) by opening Terminal and typing:
- ```brew tap homebrew/science```
- Install the following brews:
- ```brew install gcc```
- ```brew install automake```
- ```brew install gsl```
- ```brew install bison```
- ```brew install boost```
- ```brew install gfortran```
- ```brew install libmatio --with-hdf5```
- ```brew install slicot --with-default-integer-8```
- **(Optional)** To compile Dynare mex files for use on Octave, first install Octave following the [Simple Installation Instructions](http://wiki.octave.org/Octave_for_MacOS_X#Simple_Installation_Instructions_3). Then, you will probably also want to install graphicsmagick via Homebrew with `brew install graphicsmagick`.
- Force link ```flex``` and ```bison```
- ```brew link --force flex```
- ```brew link --force bison```
- **(Optional)** To compile Dynare mex files for use on Octave:
- ```brew install octave```
- **(Optional)** To compile Dynare's documentation, first install the latest version of [MacTeX](http://www.tug.org/mactex/). Then install `doxygen`, `latex2html` and `texi2html` via Homebrew with the following commands:
- ```brew install doxygen```
- ```brew install texinfo```
- ```brew install latex2html```
- ```brew install texi2html```
- **(On OS X 10.7 Only)** Copy [FlexLexer.h](http://www.dynare.org/DynareWiki/BuildingDynareFromSource?action=AttachFile&do=view&target=FlexLexer.h) into the `preprocessor` directory (there was an error in the `FlexLexer.h` file distributed with 10.7)
- Finally, switch to the root dynare directory. Ensure your path contains `/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/texbin:/usr/local/sbin`. Run:
- **(On OS X 10.7 Only)** Copy [FlexLexer.h](http://www.dynare.org/build/FlexLexer.h) into the `preprocessor` directory (there was an error in the `FlexLexer.h` file distributed with 10.7)
- Ensure `/usr/local/bin` is at the beginning of your path:
- ```PATH=/usr/local/bin:$PATH```
- Finally, switch to the root dynare directory and compile dynare
- `autoreconf -si`
- `./configure --with-matlab=/Applications/MATLAB_R2013a.app MATLAB_VERSION=8.1 YACC=/usr/local/Cellar/bison/<<BISON VERSION>>/bin/bison`
- `./configure --with-matlab=/Applications/MATLAB_R2014b.app MATLAB_VERSION=8.4`
- `make`
- `make pdf TEXI2DVI=/usr/local/Cellar/texinfo/5.2/bin/texi2dvi`, where you replace everything after the equal sign with the path to the `texi2dvi` installed by homebrew when you installed `texinfo`.
TZcode @ 4be47034
Subproject commit b642763676536c148ad827a0286862be87c5ae8e
Subproject commit 4be470341a73bb22d58bb0d930ff624a5bf1a7f6
This diff is collapsed.
......@@ -80,15 +80,17 @@ Copyright: 1995-2007 Kurt Hornik
2008-2009 Dynare Team
License: GPL-3+
Files: matlab/missing/bicgstab/bicgstab.m
Copyright: 2008 Radek Salac
License: GPL-3+
Files: matlab/missing/strjoin/strjoin.m
Copyright: 2007 Muthiah Annamalai <muthiah.annamalai@uta.edu>
2013 Dynare Team
License: GPL-3+
Files: matlab/missing/corrcoef/corrcoef.m matlab/missing/corrcoef/sumskipnan.m
matlab/missing/corrcoef/flag_implicit_skip_nan.m matlab/missing/corrcoef/tcdf.m
Copyright: 2000-2005,2008,2009,2011 by Alois Schloegl <alois.schloegl@gmail.com>
2014 Dynare Team
License: GPL-3+
Files: matlab/lmmcp/catstruct.m
Copyright: 2005 Jos van der Geest <jos@jasen.nl>
2013 Christophe Gouel
......
......@@ -170,11 +170,11 @@ if test $ax_blas_ok = no; then
AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl -lguide -lpthread"],,[-lguide -lpthread])
fi
# BLAS in Apple vecLib library?
# BLAS in Apple Accelerate library?
if test $ax_blas_ok = no; then
save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS"
AC_MSG_CHECKING([for $sgemm in -framework vecLib])
AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"])
save_LIBS="$LIBS"; LIBS="-framework Accelerate $LIBS"
AC_MSG_CHECKING([for $sgemm in -framework Accelerate])
AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework Accelerate"])
AC_MSG_RESULT($ax_blas_ok)
LIBS="$save_LIBS"
fi
......
......@@ -22,6 +22,9 @@ AC_REQUIRE([AX_MATLAB])
AC_MSG_CHECKING([for MATLAB version])
if test "x$MATLAB_VERSION" != "x"; then
case $MATLAB_VERSION in
*2014b | *2014B)
MATLAB_VERSION="8.4"
;;
*2014a | *2014A)
MATLAB_VERSION="8.3"
;;
......
function B = append(A,a) % --*-- Unitary tests --*--
% append method for dates class.
%
% INPUTS
% o A dates object.
% o a dates object with one element or string that can be interpreted as a date.
%
% OUTPUTS
% o B dates object containing dates defined in A and a.
%
% EXAMPLE 1
% If A is a dates object with quarterly frequency, then B = A.append(dates('1950Q2')) and
% B = A.append('1950Q2') are equivalent syntaxes.
% Copyright (C) 2012-2013 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/>.
if isa(a,'dates')
if ~isequal(length(a),1)
error(['dates::append: Input argument ' inputname(2) ' has to be a dates object with one element.'])
end
if isempty(a)
B = A;
return
end
elseif isdate(a)
a = dates(a);
end
if ~isequal(A.freq, a.freq)
error(['dates::append: A and a must have common frequency!'])
end
B = dates();
B.ndat = A.ndat+1;
B.freq = A.freq;
B.time = NaN(B.ndat,2);
B.time(1:A.ndat,:) = A.time;
B.time(A.ndat+1,:) = a.time;
%@test:1
%$ % Define some dates
%$ B1 = '1953Q4';
%$ B2 = '1950Q2';
%$ B3 = '1950Q1';
%$ B4 = '1945Q3';
%$ B5 = '2009Q2';
%$
%$ % Define expected results.
%$ e.time = [1945 3; 1950 1; 1950 2; 1953 4; 2009 2];
%$ e.freq = 4;
%$ e.ndat = 5;
%$
%$ % Call the tested routine.
%$ d = dates(B4,B3,B2,B1);
%$ d = d.append(dates(B5));
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
%$ t(2) = dyn_assert(d.freq,e.freq);
%$ t(3) = dyn_assert(d.ndat,e.ndat);
%$ T = all(t);
%@eof:1
%@test:2
%$ % Define some dates
%$ B1 = '1953Q4';
%$ B2 = '1950Q2';
%$ B3 = '1950Q1';
%$ B4 = '1945Q3';
%$ B5 = '2009q2';
%$
%$ % Define expected results.
%$ e.time = [1945 3; 1950 1; 1950 2; 1953 4; 2009 2];
%$ e.freq = 4;
%$ e.ndat = 5;
%$
%$ % Call the tested routine.
%$ d = dates(B4,B3,B2,B1);
%$ d = d.append(B5);
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
%$ t(2) = dyn_assert(d.freq,e.freq);
%$ t(3) = dyn_assert(d.ndat,e.ndat);
%$ T = all(t);
%@eof:2
\ No newline at end of file
function C = colon(varargin) % --*-- Unitary tests --*--
% Overloads the colon operator (:). This method can be used to create ranges of dates.
%
% INPUTS
% o A dates object with one element.
% o d integer scalar, number of periods between each date (default value, if nargin==2, is one)
% o B dates object with one element.
%
% OUTPUTS
% o C dates object with length(B-A) elements (if d==1).
%
% REMARKS
% B must be greater than A if d>0.
% Copyright (C) 2013 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/>.
if isequal(nargin,2)
A = varargin{1};
B = varargin{2};
d = 1;
if ~(isa(A,'dates') && isa(B,'dates') && isequal(length(A),1) && isequal(length(B),1))
error('dates::colon: In an expression like A:B, A and B must be dates objects!')
end
elseif isequal(nargin,3)
A = varargin{1};
B = varargin{3};
d = varargin{2};
if ~(isa(A,'dates') && isa(B,'dates') && isequal(length(A),1) && isequal(length(B),1))
error('dates::colon: In an expression like A:d:B, A and B must be dates objects and d a scalar integer (number of periods)!')
end
if ~(isscalar(d) && isint(d))
error('dates::colon: In an expression like A:d:B, A and B must be dates objects and d a scalar integer (number of periods)!')
end
if isequal(d,0)
error('dates::colon: In an expression like A:d:B, d (the incremental number of periods) must nonzero!')
end
else
error('dates::colon: Wrong calling sequence! See the manual for the colon (:) operator and dates objects.')
end
if ~isequal(A.freq,B.freq)
error(['dates::colon: Input arguments ' inputname(1) 'and ' inputname(2) ' must have common frequency!'])
end
if A>B && d>0
error(['dates::colon: ' inputname(1) ' must precede ' inputname(2) '!' ])
end
if B>A && d<0
error(['dates::colon: ' inputname(2) ' must precede ' inputname(1) '!' ])
end
C = dates();
n = (B-A)+1;
m = n;
if d>1
m = length(1:d:n);
end
C.freq = A.freq;
if isequal(C.freq,1)
C.ndat = m;
C.time = NaN(m,2);
C.time(:,1) = A.time(1)+transpose(0:d:n-1);
C.time(:,2) = 1;
else
C.time = NaN(n,2);
initperiods = min(C.freq-A.time(2)+1,n);
C.time(1:initperiods,1) = A.time(1);
C.time(1:initperiods,2) = transpose(A.time(2)-1+(1:initperiods));
if n>initperiods
p = n-initperiods;
if p<=C.freq
C.time(initperiods+(1:p),1) = A.time(1)+1;
C.time(initperiods+(1:p),2) = transpose(1:p);
else
q = fix(p/C.freq);
r = rem(p,C.freq);
C.time(initperiods+(1:C.freq*q),2) = repmat(transpose(1:C.freq),q,1);
C.time(initperiods+(1:C.freq*q),1) = kron(A.time(1)+transpose(1:q),ones(C.freq,1));
if r>0
C.time(initperiods+C.freq*q+(1:r),1) = C.time(initperiods+C.freq*q,1)+1;
C.time(initperiods+C.freq*q+(1:r),2) = transpose(1:r);
end
end
end
if d>1
C.time = C.time(1:d:n,:);
C.ndat = m;
else
C.ndat = n;
end
end
%@test:1
%$ % Define two dates
%$ date_1 = '1950Q2';
%$ date_2 = '1951Q4';
%$
%$ % Define expected results.
%$ e.freq = 4;
%$ e.time = [1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4];
%$
%$ % Call the tested routine.
%$ d1 = dates(date_1);
%$ d2 = dates(date_2);
%$ d3 = d1:d2;
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d3.time,e.time);
%$ t(2) = dyn_assert(d3.freq,e.freq);
%$ T = all(t);
%@eof:1
%@test:2
%$ % Define expected results.
%$ e.freq = 4;
%$ e.time = [1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4];
%$
%$ % Call the tested routine.
%$ d = dates('1950Q2'):dates('1951Q4');
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
%$ t(2) = dyn_assert(d.freq,e.freq);
%$ T = all(t);
%@eof:2
%@test:3
%$ % Define expected results.
%$ e.freq = 4;
%$ e.time = [1950 2; 1950 4; 1951 2; 1951 4];
%$
%$ % Call the tested routine.
%$ d = dates('1950Q2'):2:dates('1951Q4');
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
%$ t(2) = dyn_assert(d.freq,e.freq);
%$ T = all(t);
%@eof:3
%$ @test:3
%$ % Create an empty dates object for quaterly data
%$ qq = dates('Q');
%$
%$ % Define expected results.
%$ e.freq = 4;
%$ e.time = [1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4];
%$
%$ % Call the tested routine.
%$ d = qq(1950,2):qq(1951,4);
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
%$ t(2) = dyn_assert(d.freq,e.freq);
%$ T = all(t);
%$ @eof:3
%$ @test:4
%$ % Create an empty dates object for quaterly data
%$ qq = dates('Q');
%$
%$ % Define expected results.
%$ e.freq = 4;
%$ e.time = [1950 1; 1950 2; 1950 3];
%$
%$ % Call the tested routine.
%$ d = qq(1950,1):qq(1950,3);
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
%$ t(2) = dyn_assert(d.freq,e.freq);
%$ T = all(t);
%$ @eof:4
\ No newline at end of file
function dd = dates(varargin) % --*-- Unitary tests --*--
%@info:
%! @deftypefn {Function File} {@var{dd} =} dates (@var{a},@var{b},...)
%! @anchor{dates}
%! @sp 1
%! Constructor for the Dynare dates class (unordered sequence of dates).
%! @sp 2
%! @strong{Inputs}
%! @sp 1
%! @table @ @var
%! @item a
%! String, date.
%! @item b
%! @end table
%! @sp 2
%! @strong{Outputs}
%! @sp 1
%! @table @ @var
%! @item dd
%! Dynare dates object.
%! @end table
%! @sp 1
%! @strong{Properties}
%! @sp 1
%! The constructor defines the following properties:
%! @sp 1
%! @table @ @var
%! @item ndate
%! Scalar integer, the number of dates.
%! @item freq
%! Scalar integer, the frequency of the time series. @var{freq} is equal to 1 if data are on a yearly basis or if
%! frequency is unspecified. @var{freq} is equal to 4 if data are on a quaterly basis. @var{freq} is equal to
%! 12 if data are on a monthly basis. @var{freq} is equal to 52 if data are on a weekly basis.
%! @item time
%! Array of integers (nobs*2). The first column defines the years associated to each date. The second column,
%! depending on the frequency, indicates the week, month or quarter numbers. For yearly data or unspecified frequency
%! the second column is filled by ones.
%! @end table
%! @sp 2
%! @strong{This function is called by:}
%! @sp 2
%! @strong{This function calls:}
%!
%! @end deftypefn
%@eod:
% Copyright (C) 2011-2014 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/>.
% Initialization.
if nargin>0 && ischar(varargin{1}) && isequal(varargin{1},'initialize')
dd = struct('ndat', 0, 'freq', NaN(0), 'time', NaN(0,2));
dd = class(dd,'dates');
assignin('base','emptydatesobject',dd);
return
end
dd = evalin('base','emptydatesobject');
if isequal(nargin, 0)