diff --git a/matlab/@dynDate/colon.m b/matlab/@dynDate/colon.m
index 6100cdd8a..ee260b66a 100644
--- a/matlab/@dynDate/colon.m
+++ b/matlab/@dynDate/colon.m
@@ -47,8 +47,6 @@ function sp = colon(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if nargin~=2
error('dynDate::colon: I need exactly two input arguments!')
end
@@ -71,22 +69,6 @@ for t=1:n
a = +a;
sp = sp.append(a);
end
-% $$$ if a==b% Time range with only one date.
-% $$$ sp = dynDates(a);
-% $$$ sp = sp.setFreq(a.freq);
-% $$$ sp = sp.setSize(1);
-% $$$ sp = sp.setTime(1,a.time);
-% $$$ else
-% $$$ n = b-a;
-% $$$ sp = dynDates();
-% $$$ sp = sp.setFreq(a.freq);
-% $$$ sp = sp.setSize(n+1);
-% $$$ sp = sp.setTime(1,a.time);
-% $$$ for t=2:n+1
-% $$$ a = +a;
-% $$$ sp = sp.setTime(t,a.time);
-% $$$ end
-% $$$ end
%@test:1
%$ % Define two dates
diff --git a/matlab/@dynDate/display.m b/matlab/@dynDate/display.m
index 740f66b22..03868815e 100644
--- a/matlab/@dynDate/display.m
+++ b/matlab/@dynDate/display.m
@@ -17,5 +17,4 @@ function display(d)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
- fprintf('%s = \n', inputname(1), format(d));
-end
+fprintf('%s = \n', inputname(1), format(d));
\ No newline at end of file
diff --git a/matlab/@dynDate/dynDate.m b/matlab/@dynDate/dynDate.m
index 44281d91a..8cfe1136b 100644
--- a/matlab/@dynDate/dynDate.m
+++ b/matlab/@dynDate/dynDate.m
@@ -1,4 +1,4 @@
-function date = dynDate(a)
+function date = dynDate(a,b)
%@info:
%! @deftypefn {Function File} {@var{date} =} dynDate (@var{a})
@@ -60,8 +60,6 @@ function date = dynDate(a)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
date = struct;
date.freq = NaN;
@@ -75,6 +73,7 @@ switch nargin
return
case 1
if ischar(a)% Weekly, Monthly or Quaterly data.
+ a = upper(a);
if length(a)>1
quaterly = findstr('Q',a);
monthly = findstr('M',a);
@@ -129,6 +128,23 @@ switch nargin
error('dynDate:: Can''t instantiate the class, wrong calling sequence!')
end
end
+ case 2 % provide time and freq to instantiate a dynDate object
+ date = dynDate();
+ if isnumeric(b) && isscalar(b) && (b==1 || b==4 || b==12 || b==52)
+ date.freq = b;
+ if ~isnumeric(a) && size(a)~=2 && size(a,2)~=2
+ error(['dynDate:: Can''t instantiate the class! The first argument ' inputname(a) ' must be a 1*2 vector of integers.'])
+ end
+ if b==1 && a(2)~1
+ error(['dynDate:: Can''t instantiate the class! The second element of the first argument ' inputname(a) ' must be equal to one.'])
+ end
+ if a(2)<=0 || a(2)>b
+ error(['dynDate:: Can''t instantiate the class! The second element of the first argument ' inputname(a) ' must be <=' int2str(b) '.' ])
+ end
+ date.time = a;
+ else
+ error(['dynDate:: Can''t instantiate the class! The second argument ' inputname(b) ' must be equal to 1, 4, 12 or 52.'])
+ end
otherwise
error('dynDate:: Can''t instantiate the class, wrong calling sequence!')
end
@@ -137,8 +153,8 @@ end
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = '1950Q2';
-%$ date_3 = '1950M10';
-%$ date_4 = '1950W50';
+%$ date_3 = '1950m10';
+%$ date_4 = '1950w50';
%$ date_5 = '1950';
%$
%$ % Define expected results.
@@ -188,4 +204,37 @@ end
%$ t(5) = dyn_assert(all(isnan(mm.time)),1);
%$ t(6) = dyn_assert(all(isnan(ww.time)),1);
%$ T = all(t);
-%@eof:1
\ No newline at end of file
+%@eof:2
+
+%@test:3
+%$ % Try to instatiate dynDate objects.
+%$ try
+%$ a = dynDate([1950 1],4);
+%$ t(1) = 1;
+%$ catch
+%$ t(1) = 0;
+%$ end
+%$ try
+%$ a = dynDate([1950 5],4);
+%$ t(1) = 0;
+%$ catch
+%$ t(1) = 1;
+%$ end
+%$ T = all(t);
+%@eof:3
+
+%@test:4
+%$ % Instatiate an empty objects for quaterly, monthly and weekly dates.
+%$ qq = dynDate('q');
+%$ mm = dynDate('m');
+%$ ww = dynDate('w');
+%$
+%$ % Check the results.
+%$ t(1) = dyn_assert(qq.freq,4);
+%$ t(2) = dyn_assert(mm.freq,12);
+%$ t(3) = dyn_assert(ww.freq,52);
+%$ t(4) = dyn_assert(all(isnan(qq.time)),1);
+%$ t(5) = dyn_assert(all(isnan(mm.time)),1);
+%$ t(6) = dyn_assert(all(isnan(ww.time)),1);
+%$ T = all(t);
+%@eof:4
diff --git a/matlab/@dynDate/eq.m b/matlab/@dynDate/eq.m
index 404a04b05..1babacbe3 100644
--- a/matlab/@dynDate/eq.m
+++ b/matlab/@dynDate/eq.m
@@ -46,8 +46,6 @@ function c = eq(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if nargin~=2
error('dynDate::eq: I need exactly two input arguments!')
end
@@ -57,14 +55,13 @@ if ~( isa(a,'dynDate') && isa(b,'dynDate'))
end
if ~isequal(a.freq,b.freq)
- error(['dynDate::eq: Input arguments ' inputname(1) 'and ' inputname(2) ' have no common frequencies!'])
+ c = 0;
+ return
end
c = isequal(a.time,b.time);
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = '1950Q2';
@@ -80,10 +77,11 @@ c = isequal(a.time,b.time);
%$ d5 = dynDate(date_5);
%$ try
%$ i1 = (d1==d2);
-%$ t1 = 0;
-%$ catch
%$ t1 = 1;
+%$ catch
+%$ t1 = 0;
%$ end
+%$ t1 = t1 & ~i1;
%$ i2 = (d2==d2);
%$ i3 = (d4==d5);
%$
@@ -94,3 +92,33 @@ c = isequal(a.time,b.time);
%$ T = all(t);
%@eof:1
+%@test:2
+%$ % Define some dates
+%$ date_1 = 1950;
+%$ date_2 = '1950q2';
+%$ date_3 = '1950m10';
+%$ date_4 = '1950w50';
+%$ date_5 = '1950w32';
+%$
+%$ % Call the tested routine.
+%$ d1 = dynDate(date_1);
+%$ d2 = dynDate(date_2);
+%$ d3 = dynDate(date_3);
+%$ d4 = dynDate(date_4);
+%$ d5 = dynDate(date_5);
+%$ try
+%$ i1 = (d1==d2);
+%$ t1 = 1;
+%$ catch
+%$ t1 = 0;
+%$ end
+%$ t1 = t1 & ~i1;
+%$ i2 = (d2==d2);
+%$ i3 = (d4==d5);
+%$
+%$ % Check the results.
+%$ t(1) = t1;
+%$ t(2) = dyn_assert(i2,1);
+%$ t(3) = dyn_assert(i3,0);
+%$ T = all(t);
+%@eof:2
\ No newline at end of file
diff --git a/matlab/@dynDate/format.m b/matlab/@dynDate/format.m
index 3a9eaee64..93357196d 100644
--- a/matlab/@dynDate/format.m
+++ b/matlab/@dynDate/format.m
@@ -69,8 +69,6 @@ switch date.freq
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = '1950Q2';
@@ -89,4 +87,4 @@ end
%$ t(3) = dyn_assert(date_3,DATE_3);
%$ t(4) = dyn_assert(date_4,DATE_4);
%$ T = all(t);
-%@eof:1
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDate/ge.m b/matlab/@dynDate/ge.m
index 2be9bb485..098988ae7 100644
--- a/matlab/@dynDate/ge.m
+++ b/matlab/@dynDate/ge.m
@@ -30,7 +30,7 @@ function c = ge(a,b)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -47,8 +47,6 @@ function c = ge(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if a>b
c=1;
else
@@ -60,8 +58,6 @@ else
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = '1950Q3';
%$ date_2 = '1950Q3';
@@ -84,4 +80,4 @@ end
%$ t(3) = dyn_assert(i3,0);
%$ t(4) = dyn_assert(i4,1);
%$ T = all(t);
-%@eof:1
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDate/gt.m b/matlab/@dynDate/gt.m
index dc3b0a57e..4cefe3f4e 100644
--- a/matlab/@dynDate/gt.m
+++ b/matlab/@dynDate/gt.m
@@ -46,8 +46,6 @@ function c = gt(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if nargin~=2
error('dynDate::eq: I need exactly two input arguments!')
end
@@ -73,8 +71,6 @@ else
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = '1950Q2';
@@ -99,4 +95,4 @@ end
%$ t(3) = dyn_assert(i3,0);
%$ t(4) = dyn_assert(i4,0);
%$ T = all(t);
-%@eof:1
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDate/isempty.m b/matlab/@dynDate/isempty.m
index 66fb42bed..e00b26212 100644
--- a/matlab/@dynDate/isempty.m
+++ b/matlab/@dynDate/isempty.m
@@ -27,7 +27,7 @@ function b = isempty(a)
%! @end deftypefn
%@eod:
-% Copyright (C) 2012 Dynare Team
+% Copyright (C) 2012, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -44,10 +44,16 @@ function b = isempty(a)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~isa(a,'dynDate')
error(['dynDate::isempty: Input argument ' inputname(1) ' have to be a dynDate object!'])
end
-b = all(isnan(a.time)) && isnan(a.freq);
\ No newline at end of file
+b = all(isnan(a.time)) && isnan(a.freq);
+
+%@test:1
+%$ % Instantiate an empty dynDate object
+%$ d = dynDate();
+%$ % Test if this object is empty
+%$ t(1) = isempty(d);
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDate/le.m b/matlab/@dynDate/le.m
index 6fd1026c4..b3f3dd79f 100644
--- a/matlab/@dynDate/le.m
+++ b/matlab/@dynDate/le.m
@@ -30,7 +30,7 @@ function c = le(a,b)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -47,8 +47,6 @@ function c = le(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if a.
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if nargin~=2
error('dynDate::eq: I need exactly two input arguments!')
end
@@ -73,8 +71,6 @@ else
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = '1950Q2';
diff --git a/matlab/@dynDate/max.m b/matlab/@dynDate/max.m
index a25d3f766..daa62831f 100644
--- a/matlab/@dynDate/max.m
+++ b/matlab/@dynDate/max.m
@@ -46,8 +46,6 @@ function c = max(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if nargin~=2
error('dynDate::min: I need exactly two input arguments!')
end
@@ -67,14 +65,12 @@ else
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = 2000;
-%$ date_3 = '1950Q2';
+%$ date_3 = '1950q2';
%$ date_4 = '1950Q3';
-%$ date_5 = '1950M1';
+%$ date_5 = '1950m1';
%$ date_6 = '1948M6';
%$
%$ % Call the tested routine.
diff --git a/matlab/@dynDate/min.m b/matlab/@dynDate/min.m
index 5d0e35901..df8c0c9c3 100644
--- a/matlab/@dynDate/min.m
+++ b/matlab/@dynDate/min.m
@@ -46,8 +46,6 @@ function c = min(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if nargin~=2
error('dynDate::min: I need exactly two input arguments!')
end
@@ -67,8 +65,6 @@ else
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = 2000;
diff --git a/matlab/@dynDate/minus.m b/matlab/@dynDate/minus.m
index a037f0aee..3559af74d 100644
--- a/matlab/@dynDate/minus.m
+++ b/matlab/@dynDate/minus.m
@@ -31,7 +31,7 @@ function c = minus(a,b)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -48,8 +48,6 @@ function c = minus(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~( isa(a,'dynDate') && isa(b,'dynDate') )
error(['dynDate::minus: Input arguments ' inputname(1) ' and ' inputname(2) ' must be dynDate objects!'])
end
@@ -77,8 +75,6 @@ switch a.freq
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_0_1 = 1950;
%$ date_0_2 = 1950;
diff --git a/matlab/@dynDate/ne.m b/matlab/@dynDate/ne.m
index 4069f5fc3..9a647839a 100644
--- a/matlab/@dynDate/ne.m
+++ b/matlab/@dynDate/ne.m
@@ -46,8 +46,6 @@ function c = ne(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if nargin~=2
error('dynDate::ne: I need exactly two input arguments!')
end
@@ -63,11 +61,9 @@ end
c = ~isequal(a.time,b.time);
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
-%$ date_2 = '1950Q2';
+%$ date_2 = '1950q2';
%$ date_3 = '1950M10';
%$ date_4 = '1950W50';
%$ date_5 = '1950W32';
diff --git a/matlab/@dynDate/plus.m b/matlab/@dynDate/plus.m
index dd6150b77..968e4e610 100644
--- a/matlab/@dynDate/plus.m
+++ b/matlab/@dynDate/plus.m
@@ -31,7 +31,7 @@ function c = plus(a,b)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -48,8 +48,6 @@ function c = plus(a,b)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHORS(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~isa(a,'dynDate')
error(['dynDate::plus: Input argument ' inputname(1) ' must be a dynDate object!'])
end
@@ -58,7 +56,6 @@ if b<0 || ~isint(b)
error(['dynDate::plus: Input argument ' inputname(2) ' must be a positive integer'])
end
-
if b==0
c = a;
return
@@ -80,8 +77,6 @@ switch a.freq
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = 1950;
%$ date_2 = '1950Q4';
diff --git a/matlab/@dynDate/subsasgn.m b/matlab/@dynDate/subsasgn.m
index e02a67e1d..93ad09e37 100644
--- a/matlab/@dynDate/subsasgn.m
+++ b/matlab/@dynDate/subsasgn.m
@@ -17,5 +17,4 @@ function val = subsasgn(val, idx, rhs)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
- error('Members of dynDate class are private')
-end
+error('dynDate::subsasgn: Members of dynDate class are private')
\ No newline at end of file
diff --git a/matlab/@dynDate/subsref.m b/matlab/@dynDate/subsref.m
index f611aaef7..486983153 100644
--- a/matlab/@dynDate/subsref.m
+++ b/matlab/@dynDate/subsref.m
@@ -32,7 +32,7 @@ function B = subsref(A,S)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011, 2012 Dynare Team
+% Copyright (C) 2011, 2012, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -49,75 +49,98 @@ function B = subsref(A,S)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
-% Allow to populate an empty dynDate object or update a dynDate object
-if isequal(length(S),1) && isequal(S.type,'()')
- if isequal(length(S.subs),1) && ischar(S.subs{1})
- B = dynDate(S.subs{1});
- return
- elseif isequal(length(S.subs),1) && isnumeric(S.subs{1})
- % Yearly data are assumed.
- if isequal(A.freq,1)
- B = dynDate(S.subs{1});
- return
- end
- elseif isequal(length(S.subs),2) && isequal(length(S.subs{1}),1) && isequal(length(S.subs{2}),1)
- tmp = [];
- switch A.freq
- case 4
- % Quaterly data
- if S.subs{2}<5 && S.subs{2}>0
- tmp = [num2str(S.subs{1}), 'Q' num2str(S.subs{2})];
- end
- case 12
- % Monthly data
- if S.subs{2}<13 && S.subs{2}>0
- tmp = [num2str(S.subs{1}), 'M' num2str(S.subs{2})];
- end
- case 52
- % Weekly data
- if S.subs{2}<53 && S.subs{2}>0
- tmp = [num2str(S.subs{1}), 'W' num2str(S.subs{2})];
- end
- otherwise
- %
- end
- if ~isempty(tmp)
- B = dynDate(tmp);
- return
- end
+switch S(1).type
+ case '.'
+ switch S(1).subs
+ case 'format'
+ B = format(A);
+ case {'time', 'freq'}
+ B = builtin('subsref', A, S(1));
+ otherwise
+ error('dynDate::subsref: Unknown public member of method!')
end
+ case '()'
+ switch length(S(1).subs)
+ case 1
+ if ischar(S(1).subs{1})
+ if numel(S(1).subs{1})==1 && isempty(strmatch(S(1).subs{1},{'W','M','Q','Y'},'exact'))
+ error(['dynDate::subsref: To set the frequency, the input argument of dynDate object ''' inputname(1) ''' should be ''W'', ''M'', ''Q'' or ''Y''.'])
+ end
+ % Set the frequency (if numel==1) of an empty dynDate object or set the date (if numel>1).
+ B = dynDate(S(1).subs{1});
+ elseif isnumeric(S(1).subs{1}) && isscalar(S(1).subs{1}) && isint(S(1).subs{1})
+ if (~isnan(A.freq) && A.freq==1) || isnan(A.freq)
+ B = dynDate(S(1).subs{1});
+ else
+ error(['dynDate::subsref: dynDate object ''' inputname(1) ''' was not instantiated for years.'])
+ end
+ else
+ error('dynDate::subsref: Something is wrong in your syntax!')
+ end
+ case 2% Populate an empty dynDate object
+ if isnan(A.freq)
+ error(['dynDate::subsref: I cannot interpret the two inputs of dynDate object ''' inputname(1) ''' because frequency is not set.'])
+ else
+ tmp = [];
+ switch A.freq
+ case 4
+ % Quaterly data
+ if isint(S(1).subs{2}) && isint(S(1).subs{1}) && S(1).subs{2}<5 && S(1).subs{2}>0
+ tmp = [int2str(S(1).subs{1}), 'Q' int2str(S(1).subs{2})];
+ else
+ if ~isint(S(1).subs{2}) || ~(S(1).subs{2}<5 && S(1).subs{2}>0)
+ error(['dynDate::subsref: The second input argument of dynDate object ''' inputname(1) ''' (' num2str(S(1).subs{2}) ') should be a positive integer less than or equal to 4.'])
+ end
+ if ~isint(S(1).subs{2})
+ error(['dynDate::subsref: The first input argument of dynDate object ''' inputname(1) ''' (' num2str(S(1).subs{1}) ') should be an integer.'])
+ end
+ end
+ case 12
+ % Monthly data
+ if isint(S(1).subs{2}) && isint(S(1).subs{1}) && S(1).subs{2}<13 && S(1).subs{2}>0
+ tmp = [num2str(S(1).subs{1}), 'M' num2str(S(1).subs{2})];
+ else
+ if ~isint(S(1).subs{2}) || ~(S(1).subs{2}<13 && S(1).subs{2}>0)
+ error(['dynDate::subsref: The second input argument of dynDate object ''' inputname(1) ''' (' num2str(S(1).subs{2}) ') should be a positive integer less than or equal to 12.'])
+ end
+ if ~isint(S(1).subs{2})
+ error(['dynDate::subsref: The first input argument of dynDate object ''' inputname(1) ''' (' num2str(S(1).subs{1}) ') should be an integer.'])
+ end
+ end
+ case 52
+ % Weekly data
+ if isint(S(1).subs{2}) && isint(S(1).subs{1}) && S(1).subs{2}<53 && S(1).subs{2}>0
+ tmp = [num2str(S(1).subs{1}), 'W' num2str(S(1).subs{2})];
+ else
+ if ~isint(S(1).subs{2}) || ~(S(1).subs{2}<53 && S(1).subs{2}>0)
+ error(['dynDate::subsref: The second input argument of dynDate object ''' inputname(1) ''' (' num2str(S(1).subs{2}) ') should be a positive integer less than or equal to 52.'])
+ end
+ if ~isint(S(1).subs{2})
+ error(['dynDate::subsref: The first input argument of dynDate object ''' inputname(1) ''' (' num2str(S(1).subs{1}) ') should be an integer.'])
+ end
+ end
+ case 1
+ % Yearly data
+ error('dynDate::subsref: Frequency is set for years. You should not provide more than one integer input argument (to set the year)!')
+ otherwise
+ error('dynDate::subsref: Unknown frequency!')
+ end
+ if ~isempty(tmp)
+ B = dynDate(tmp);
+ end
+ end
+ otherwise
+ error(['dynDate::subsref: dynDate object ''' inputname(1) ''' cannot have more than two inputs.'])
+ end
+ otherwise
+ error('dynDate::subsref: Something is wrong in your syntax!')
end
-% Give access to dynDate methods (format).
-if isequal(length(S),1) && isequal(S.type,'.') && ( strcmp(S.subs,'format') )
- B = format(A);
- return
+S = shiftS(S);
+if ~isempty(S)
+ B = subsref(B, S);
end
-
-% Give access to dynDate properties (time and freq).
-if isequal(length(S),1) && isequal(S.type,'.') && ( strcmp(S.subs,'time') || strcmp(S.subs,'freq') )
- B = builtin('subsref', A, S);
- return
-end
-
-% Allow more complex call to subsref such that:
-%
-% a = dynDate();
-% a('2009M4').time
-%
-% should return a row vector [2009 4]. Note that the object name should not match any function name
-% declared in the matlab's path.
-if length(S)>1 && isequal(S(1).type,'()') && isequal(S(2).type,'.')
- tmp = dynDate(S(1).subs{1});
- B = builtin('subsref', tmp, S(2));
- return
-end
-
-error('dynDate::subsref: You''re trying to do something wrong!')
-
%@test:1
%$ t = zeros(3,1);
%$
@@ -168,11 +191,13 @@ error('dynDate::subsref: You''re trying to do something wrong!')
%@test:3
%$ % Try more complex call to overloaded subsref
-%$ t = zeros(1,1);
+%$ t = zeros(3,1);
%$ try
-%$ a = dynDate();
+%$ a = dynDate('M');
%$ time = a('1973M1').time;
%$ t(1) = 1;
+%$ t(2) = dyn_assert(time,[1973,1]);
+%$ t(3) = dyn_assert(a.freq,12);
%$ catch
%$ % Nothing to do here.
%$ end
@@ -180,7 +205,6 @@ error('dynDate::subsref: You''re trying to do something wrong!')
%$ T = all(t);
%@eof:3
-
%@test:4
%$ t = NaN(3,1);
%$ % Instantiate an empty object for quaterly date
@@ -198,4 +222,17 @@ error('dynDate::subsref: You''re trying to do something wrong!')
%$ t(1) = dyn_assert(a.freq,4);
%$ t(2) = dyn_assert(a.time,[1938,4]);
%$ T = all(t);
-%@eof:3
\ No newline at end of file
+%@eof:4
+
+%@test:5
+%$ t = NaN(2,1);
+%$ % Instantiate an empty object for quaterly date
+%$ qq = dynDate('Q');
+%$ % Populate this object and get the time member
+%$ time = qq(1938,4).time;
+%$
+%$ % Check the results
+%$ t(1) = dyn_assert(qq.freq,4);
+%$ t(2) = dyn_assert(time,[1938,4]);
+%$ T = all(t);
+%@eof:5
\ No newline at end of file
diff --git a/matlab/@dynDate/uminus.m b/matlab/@dynDate/uminus.m
index 56d677a39..3e29d0100 100644
--- a/matlab/@dynDate/uminus.m
+++ b/matlab/@dynDate/uminus.m
@@ -29,7 +29,7 @@ function b = uminus(a)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -46,8 +46,6 @@ function b = uminus(a)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~isa(a,'dynDate')
error(['dynDate::uminus: Input argument ' inputname(1) ' must be a dynDate object.'])
end
@@ -83,14 +81,12 @@ switch b.freq
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = '1950Q1';
%$ date_2 = '1950Q4';
%$ date_3 = '1950M1';
%$ date_4 = '1950M12';
-%$ date_5 = '1950W1';
+%$ date_5 = '1950w1';
%$ date_6 = '1950W52';
%$ date_7 = 2000;
%$
diff --git a/matlab/@dynDate/uplus.m b/matlab/@dynDate/uplus.m
index 11d2c9559..60555f36c 100644
--- a/matlab/@dynDate/uplus.m
+++ b/matlab/@dynDate/uplus.m
@@ -29,7 +29,7 @@ function b = uplus(a)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -46,8 +46,6 @@ function b = uplus(a)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~isa(a,'dynDate')
error(['dynDate::uplus: Input argument ' inputname(1) ' must be a dynDate object.'])
end
@@ -83,13 +81,11 @@ switch b.freq
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ date_1 = '1950Q3';
%$ date_2 = '1950Q4';
%$ date_3 = '1950M3';
-%$ date_4 = '1950M12';
+%$ date_4 = '1950m12';
%$ date_5 = '1950W3';
%$ date_6 = '1950W52';
%$ date_7 = 2000;
diff --git a/matlab/@dynDates/append.m b/matlab/@dynDates/append.m
index 9ab8204c7..8a64cc5f4 100644
--- a/matlab/@dynDates/append.m
+++ b/matlab/@dynDates/append.m
@@ -96,4 +96,28 @@ end
%$ t(2) = dyn_assert(d.freq,e.freq);
%$ t(3) = dyn_assert(d.ndat,e.ndat);
%$ T = all(t);
-%@eof:1
\ No newline at end of file
+%@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 = dynDates(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
diff --git a/matlab/@dynDates/dynDates.m b/matlab/@dynDates/dynDates.m
index c772ed7e5..826b10fde 100644
--- a/matlab/@dynDates/dynDates.m
+++ b/matlab/@dynDates/dynDates.m
@@ -45,7 +45,7 @@ function dd = dynDates(varargin)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011-2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -60,15 +60,13 @@ function dd = dynDates(varargin)
% 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 .
-
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
+ % along with Dynare. If not, see .
dd = struct;
dd.ndat = 0;
-dd.freq = [];
-dd.time = [];
+dd.freq = NaN;
+dd.time = NaN(1,2);
dd = class(dd,'dynDates');
@@ -104,12 +102,10 @@ switch nargin
end
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ B1 = '1945Q3';
%$ B2 = '1950Q2';
-%$ B3 = '1950Q1';
+%$ B3 = '1950q1';
%$ B4 = '1953Q4';
%$
%$ % Define expected results.
@@ -128,8 +124,6 @@ end
%@eof:1
%@test:2
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ B1 = '1945M3';
%$ B2 = '1950M2';
@@ -152,8 +146,6 @@ end
%@eof:2
%@test:3
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ B1 = '1945';
%$ B2 = '1950';
@@ -176,23 +168,21 @@ end
%@eof:3
%@test:4
-%$ addpath ../matlab
-%$
-%$ % Define some dates
-%$ B1 = '1945Q1';
-%$ B2 = '1950Q3';
-%$ B3 = '1950M10';
-%$ B4 = '1953Q1';
+%$ % Define a dynDates object
+%$ B = dynDate('1950Q1'):dynDate('1960Q3');
%$
%$
%$ % Call the tested routine.
-%$ try
-%$ d = dynDates(B1,B2,B3,B4);
-%$ t(1) = 0;
-%$ T = 0;
-%$ catch
-%$ % Expected issue...
+%$ d = B(2);
+%$ if isa(d,'dynDate')
%$ t(1) = 1;
-%$ T = 1;
+%$ else
+%$ t(1) = 0;
%$ end
+%$
+%$ if t(1)
+%$ t(2) = dyn_assert(d.freq,B.freq);
+%$ t(3) = dyn_assert(d.time,[1950 2]);
+%$ end
+%$ T = all(t);
%@eof:4
\ No newline at end of file
diff --git a/matlab/@dynDates/eq.m b/matlab/@dynDates/eq.m
new file mode 100644
index 000000000..7639ca1a2
--- /dev/null
+++ b/matlab/@dynDates/eq.m
@@ -0,0 +1,80 @@
+function C = eq(A,B)
+
+%@info:
+%! @deftypefn {Function File} {@var{C} =} eq (@var{A},@var{B})
+%! @anchor{@dynDates/eq}
+%! @sp 1
+%! Overloads the eq (equal) operator for the @ref{dynDates} class.
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item A
+%! @ref{dynDates} object.
+%! @item B
+%! @ref{dynDates} object.
+%! @end table
+%! @sp 1
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item C
+%! scalar integer equal to one if a==b, 0 otherwise.
+%! @end table
+%! @end deftypefn
+%@eod:
+
+% 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 .
+
+if nargin~=2
+ error('dynDates::eq: I need exactly two input arguments!')
+end
+
+if ~isa(A,'dynDates') || ~isa(B,'dynDates')
+ error(['dynDates::eq: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be a dynDates objects!'])
+end
+
+if ~isequal(A.freq,B.freq)
+ C = 0;
+ return
+end
+
+if ~isequal(A.ndat,B.ndat)
+ C = 0;
+ return
+end
+
+C = isequal(A.time,B.time);
+
+%@test:1
+%$ % Define some dynDates objects
+%$ d1 = dynDate('1950Q1'):dynDate('1959Q4') ;
+%$ d2 = dynDate('1960Q1'):dynDate('1979Q4') ;
+%$ d3 = dynDate('1970M1'):dynDate('1979M12') ;
+%$
+%$ % Call the tested routine.
+%$ t1 = d1==d1;
+%$ t2 = d1==d2;
+%$ t3 = d1==d3;
+%$
+%$ % Check the results.
+%$ t(1) = dyn_assert(t1,1);
+%$ t(2) = dyn_assert(t2,0);
+%$ t(2) = dyn_assert(t3,0);
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDates/intersect.m b/matlab/@dynDates/intersect.m
new file mode 100644
index 000000000..b61eee2a7
--- /dev/null
+++ b/matlab/@dynDates/intersect.m
@@ -0,0 +1,84 @@
+function C = intersect(A,B)
+
+%@info:
+%! @deftypefn {Function File} {@var{C} =} intersect (@var{A},@var{B})
+%! @anchor{@dynDates/intersect}
+%! @sp 1
+%! C of B and A.
+%! if A and B are not disjoints.
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item A
+%! @ref{dynDates} object.
+%! @item B
+%! @ref{dynDates} object.
+%! @end table
+%! @sp 2
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item C
+%! @ref{dynDates} object.
+%! @end table
+%! @end deftypefn
+%@eod:
+
+% 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 .
+
+if ~isa(A,'dynDates') || ~isa(B,'dynDates')
+ error(['dynDates::plus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must be dynDates objects!'])
+end
+
+if eq(A,B)
+ C = A;
+ return
+end
+
+if ~isequal(A.freq,B.freq)
+ C = dynDates();
+ return
+end
+
+time = intersect(A.time,B.time,'rows');
+
+C = dynDates();
+if isempty(time)
+ return
+end
+
+C.freq = A.freq;
+C.time = time;
+C.ndat = rows(time);
+
+%@test:1
+%$ % Define some dynDates objects
+%$ d1 = dynDate('1950Q1'):dynDate('1969Q4') ;
+%$ d2 = dynDate('1960Q1'):dynDate('1969Q4') ;
+%$ d3 = dynDate('1970Q1'):dynDate('1979Q4') ;
+%$
+%$ % Call the tested routine.
+%$ c1 = intersect(d1,d2);
+%$ c2 = intersect(d1,d3);
+%$
+%$ % Check the results.
+%$ t(1) = dyn_assert(c1==d2,1);
+%$ t(2) = dyn_assert(isempty(c2),1);
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDates/isempty.m b/matlab/@dynDates/isempty.m
new file mode 100644
index 000000000..ea76bd968
--- /dev/null
+++ b/matlab/@dynDates/isempty.m
@@ -0,0 +1,50 @@
+function B = isempty(A)
+
+%@info:
+%! @deftypefn {Function File} {@var{B} =} isempty (@var{A})
+%! @anchor{@dynDates/isempty}
+%! @sp 1
+%! Overloads the isempty function for the @ref{dynDates} class.
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item A
+%! @ref{dynDates} object.
+%! @end table
+%! @sp 1
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item b
+%! Integer scalar (equal to zero if @var{A} is not empty).
+%! @end table
+%! @end deftypefn
+%@eod:
+
+% 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 .
+
+B = all(isnan(A.time(:))) && isnan(A.freq) && isequal(A.ndat,0);
+
+%@test:1
+%$ % Instantiate an empty dynDate object
+%$ d = dynDates();
+%$ % Test if this object is empty
+%$ t(1) = isempty(d);
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDates/minus.m b/matlab/@dynDates/minus.m
new file mode 100644
index 000000000..693c8a3f6
--- /dev/null
+++ b/matlab/@dynDates/minus.m
@@ -0,0 +1,85 @@
+function C = minus(A,B)
+
+%@info:
+%! @deftypefn {Function File} {@var{C} =} minus (@var{A},@var{B})
+%! @anchor{@dynDates/minus}
+%! @sp 1
+%! Overloads the minus (soustraction) operator for the @ref{dynDates} class. C is the relative complement of B in A.
+%! if A and B are not disjoints.
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item A
+%! @ref{dynDates} object.
+%! @item B
+%! @ref{dynDates} object.
+%! @end table
+%! @sp 2
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item C
+%! @ref{dynDates} object.
+%! @end table
+%! @end deftypefn
+%@eod:
+
+% 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 .
+
+if isempty(B)
+ C = A;
+ return
+end
+
+if isempty(A)
+ C = dynDates();
+ return
+end
+
+if ~isequal(A.freq,B.freq)
+ C = A;
+ return
+end
+
+D = intersect(A,B);
+
+if isempty(D)
+ C = A;
+else
+ C = dynDates();
+ C.freq = A.freq;
+ C.time = setdiff(A.time,D.time,'rows');
+ C.ndat = rows(C.time);
+end
+
+%@test:1
+%$ % Define some dynDates objects
+%$ d1 = dynDate('1950Q1'):dynDate('1959Q4') ;
+%$ d2 = dynDate('1960Q1'):dynDate('1969Q4') ;
+%$ d3 = d1+d2;
+%$
+%$ % Call the tested routine.
+%$ e1 = d1-d2;
+%$ e2 = d3-d1;
+%$
+%$ % Check the results.
+%$ t(1) = dyn_assert(e1==d1,1);
+%$ t(2) = dyn_assert(e2==d2,1);
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDates/plus.m b/matlab/@dynDates/plus.m
new file mode 100644
index 000000000..626e46daa
--- /dev/null
+++ b/matlab/@dynDates/plus.m
@@ -0,0 +1,87 @@
+function C = plus(A,B)
+
+%@info:
+%! @deftypefn {Function File} {@var{C} =} plus (@var{A},@var{B})
+%! @anchor{@dynDates/plus}
+%! @sp 1
+%! Overloads the plus (addition) operator for the @ref{dynDates} class. Combines two dynDates objects, A and B, without removing repetitions
+%! if A and B are not disjoints.
+%! @sp 2
+%! @strong{Inputs}
+%! @sp 1
+%! @table @ @var
+%! @item A
+%! @ref{dynDates} object.
+%! @item B
+%! @ref{dynDates} object.
+%! @end table
+%! @sp 2
+%! @strong{Outputs}
+%! @sp 1
+%! @table @ @var
+%! @item C
+%! @ref{dynDates} object.
+%! @end table
+%! @end deftypefn
+%@eod:
+
+% 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 .
+
+if ~isa(A,'dynDates') || ~isa(B,'dynDates')
+ error(['dynDates::plus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must be dynDates objects!'])
+end
+
+if isempty(B)
+ C = A;
+ return
+end
+
+if isempty(A)
+ C = B;
+ return
+end
+
+if ~isequal(A.freq,B.freq)
+ error(['dynDates::plus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must have common frequencies!'])
+end
+
+C = dynDates();
+
+C.freq = A.freq;
+C.time = [A.time; B.time];
+C.ndat = A.ndat+B.ndat;
+
+%@test:1
+%$ % Define some dynDates objects
+%$ d1 = dynDate('1950Q1'):dynDate('1959Q4') ;
+%$ d2 = dynDate('1960Q1'):dynDate('1969Q4') ;
+%$ d3 = dynDate('1970Q1'):dynDate('1979Q4') ;
+%$
+%$ % Call the tested routine.
+%$ e1 = d1+d2;
+%$ e2 = d1+d2+d3;
+%$
+%$ % Expected results.
+%$ f1 = dynDate('1950Q1'):dynDate('1969Q4');
+%$ f2 = dynDate('1950Q1'):dynDate('1979Q4');
+%$
+%$ % Check the results.
+%$ t(1) = dyn_assert(e1==f1,1);
+%$ t(2) = dyn_assert(e2==f2,1);
+%$ T = all(t);
+%@eof:1
\ No newline at end of file
diff --git a/matlab/@dynDates/sort.m b/matlab/@dynDates/sort.m
index ecbc20e70..a0ff995ea 100644
--- a/matlab/@dynDates/sort.m
+++ b/matlab/@dynDates/sort.m
@@ -45,8 +45,6 @@ function dd = sort(dd)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~isa(dd,'dynDates')
error(['dynDates::sort: Input argument ' inputname(dd) ' has to be a dynDates object.'])
end
@@ -58,8 +56,6 @@ end
dd.time = sortrows(dd.time,[1,2]);
%@test:1
-%$ addpath ../matlab
-%$
%$ % Define some dates
%$ B1 = '1953Q4';
%$ B2 = '1950Q2';
@@ -73,7 +69,7 @@ dd.time = sortrows(dd.time,[1,2]);
%$
%$ % Call the tested routine.
%$ d = dynDates(B1,B2,B3,B4);
-%$ d = d.sort();
+%$ d = d.sort;
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
diff --git a/matlab/@dynDates/subsasgn.m b/matlab/@dynDates/subsasgn.m
index 96ff061c0..483909756 100644
--- a/matlab/@dynDates/subsasgn.m
+++ b/matlab/@dynDates/subsasgn.m
@@ -17,5 +17,4 @@ function val = subsasgn(val, idx, rhs)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
- error('Members of dynDates class are private')
-end
+error('dynDates::subsasgn: Members of dynDates class are private')
\ No newline at end of file
diff --git a/matlab/@dynDates/subsref.m b/matlab/@dynDates/subsref.m
index 426c463c4..0dd7eca68 100644
--- a/matlab/@dynDates/subsref.m
+++ b/matlab/@dynDates/subsref.m
@@ -49,30 +49,88 @@ function B = subsref(A,S)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-
-if isequal(S(1).type,'.')
+switch S(1).type
+ case '.'
switch S(1).subs
- case {'time','freq','ndat'} % Public members.
+ case {'time','freq','ndat'}% Access public members.
B = builtin('subsref', A, S(1));
- case {'sort','append','pop','unique'} % Give "dot access" to public methods.
- if length(S)==1 || (strcmp(S(2).type,'()') && isempty(S(2).subs))
- B = feval(S(1).subs,A);
+ case {'sort','unique'}% Public methods (without arguments)
+ B = feval(S(1).subs,A);
+ case {'append','pop'}% Public methods (with arguments).
+ if isequal(S(2).type,'()')
+ B = feval(S(1).subs,A,S(2).subs{:});
+ S = shiftS(S);
else
- if isequal(S(2).type,'()')
- B = feval(S(1).subs,A,S(2).subs{:});
- else
- error('dynDates::subsref: Something is wrong in your syntax!')
- end
+ error('dynDates::subsref: Something is wrong in your syntax!')
end
otherwise
- error('dynDates::subsref: Unknown public method or member!')
+ error('dynDates::subsref: Unknown public member or method!')
end
-elseif isequal(S.type,'()') % Extract a sub-sample.
- if length(S.subs)==1
- S.subs = [S.subs, ':'];
+ case '()'
+ if isscalar(S(1).subs{1})
+ if isint(S(1).subs{1}) && S(1).subs{1}>0 && S(1).subs{1}0) && all(S(1).subs{1}.
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~isa(dd,'dynDates')
error(['dynDates::unique: Input argument ' inputname(dd) ' has to be a dynDates object.'])
end
@@ -63,7 +61,7 @@ dd.ndat = size(dd.time,1);
%$ % Define some dates
%$ B1 = '1953Q4';
%$ B2 = '1950Q2';
-%$ B3 = '1950Q1';
+%$ B3 = '1950q1';
%$ B4 = '1945Q3';
%$ B5 = '1950Q2';
%$
@@ -74,7 +72,7 @@ dd.ndat = size(dd.time,1);
%$
%$ % Call the tested routine.
%$ d = dynDates(B1,B2,B3,B4,B5);
-%$ d = d.unique();
+%$ d = d.unique;
%$
%$ % Check the results.
%$ t(1) = dyn_assert(d.time,e.time);
diff --git a/matlab/@dynSeries/dynSeries.m b/matlab/@dynSeries/dynSeries.m
index 3e7cff62d..d3e267554 100644
--- a/matlab/@dynSeries/dynSeries.m
+++ b/matlab/@dynSeries/dynSeries.m
@@ -59,7 +59,7 @@ function ts = dynSeries(varargin)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011, 2012 Dynare Team
+% Copyright (C) 2011, 2012, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -76,8 +76,6 @@ function ts = dynSeries(varargin)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
ts = struct;
ts.data = [];
@@ -143,26 +141,8 @@ switch nargin
% Get the first date and set the frequency.
if ~isempty(b)
if ischar(b)% Weekly, Monthly or Quaterly data.
- quaterly = findstr('Q',b);
- monthly = findstr('M',b);
- weekly = findstr('W',b);
- yearly = findstr('Y',b);
- if ~isempty(quaterly)
- ts.freq = 4;
- end
- if ~isempty(monthly)
- ts.freq = 12;
- end
- if ~isempty(weekly)
- ts.freq = 52;
- end
- if ~isempty(yearly)
- ts.freq = 1;
- end
- if isempty(quaterly) && isempty(monthly) && isempty(weekly) && isempty(yearly)
- error('dynSeries:: Using a string as a second input argument, I can only handle weekly (W), monthly (M), quaterly (Q) or yearly (Y) data!');
- end
ts.init = dynDate(b);
+ ts.freq = ts.init.freq;
elseif isa(b,'dynDate') && ~isempty(b)
ts.freq = b.freq;
ts.init = b;
@@ -354,7 +334,7 @@ ts.time = ts.init:(ts.init+ts.nobs);
%$ t = zeros(7,1);
%$
%$ try
-%$ ts = dynSeries([transpose(1:5), transpose(6:10)],'1950Q1',{'Output'; 'Consumption'}, {'Y_t'; 'C_t'});
+%$ ts = dynSeries([transpose(1:5), transpose(6:10)],'1950q1',{'Output'; 'Consumption'}, {'Y_t'; 'C_t'});
%$ t(1) = 1;
%$ catch
%$ t = 0;
diff --git a/matlab/@dynSeries/extract.m b/matlab/@dynSeries/extract.m
index 0689d9aa3..8ae2ee5a1 100644
--- a/matlab/@dynSeries/extract.m
+++ b/matlab/@dynSeries/extract.m
@@ -1,5 +1,22 @@
function A = extract(B,varargin)
% Extract some variables from a database.
+
+% 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 .
A = dynSeries();
@@ -49,10 +66,11 @@ for i = 1:length(idVariableName)
if isempty(idx)
error(['dynSeries::extract: Variable ' VariableName_{i} ' is not a member of ' inputname(1) '!'])
end
- idVariableName(i) = idx;
+ idVariableName(i) = idx;
end
A.data = B.data(:,idVariableName);
+A.time = B.time;
A.init = B.init;
A.freq = B.freq;
A.nobs = B.nobs;
diff --git a/matlab/@dynSeries/horzcat.m b/matlab/@dynSeries/horzcat.m
index 00d47cc37..fa948df30 100644
--- a/matlab/@dynSeries/horzcat.m
+++ b/matlab/@dynSeries/horzcat.m
@@ -58,11 +58,11 @@ function a = horzcat(varargin)
% Original author: stephane DOT adjemian AT univ DASH lemans DOT fr
-if nargin==0 || nargin==1
- error('dynSeries::horzcat: I need at least two input arguments!')
-end
-
-if nargin==2
+if nargin==0
+ a = DynSeries();
+elseif nargin == 1
+ a = varargin{1};
+elseif nargin==2
a = horzcat2(varargin{1},varargin{2});
else
a = horzcat2(varargin{1},varargin{2});
diff --git a/matlab/@dynSeries/minus.m b/matlab/@dynSeries/minus.m
index 271a7b171..1ceb08a35 100644
--- a/matlab/@dynSeries/minus.m
+++ b/matlab/@dynSeries/minus.m
@@ -39,8 +39,6 @@ function A = minus(B,C)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
if ~isequal(B.vobs,C.vobs) && ~(isequal(B.vobs,1) || isequal(C.vobs,1))
error(['dynSeries::plus: Cannot add ' inputname(1) ' and ' inputname(2) ' (wrong number of variables)!'])
end
@@ -71,6 +69,7 @@ A = dynSeries();
A.freq = B.freq;
A.init = B.init;
+A.time = B.time;
A.nobs = max(B.nobs,C.nobs);
A.vobs = max(B.vobs,C.vobs);
A.name = repmat({'--NA--'},A.vobs,1);
diff --git a/matlab/@dynSeries/mrdivide.m b/matlab/@dynSeries/mrdivide.m
index e75144b86..adcff27e5 100644
--- a/matlab/@dynSeries/mrdivide.m
+++ b/matlab/@dynSeries/mrdivide.m
@@ -39,8 +39,6 @@ function A = mrdivide(B,C)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
if isa(B,'dynSeries') && isa(C,'dynSeries')
% Element by element divisions of two dynSeries object
if ~isequal(B.vobs,C.vobs) && ~(isequal(B.vobs,1) || isequal(C.vobs,1))
@@ -58,6 +56,7 @@ if isa(B,'dynSeries') && isa(C,'dynSeries')
A = dynSeries();
A.freq = B.freq;
A.init = B.init;
+ A.time = B.time;
A.nobs = max(B.nobs,C.nobs);
A.vobs = max(B.vobs,C.vobs);
A.name = repmat({'--NA--'},A.vobs,1);
@@ -67,6 +66,7 @@ elseif isnumeric(C) && isreal(C) && isequal(length(C),1) && isa(B,'dynSeries')
% division of a dynSeries object by a real scalar.
A = dynSeries();
A.freq = B.freq;
+ A.time = B.time;
A.init = B.init;
A.nobs = B.nobs;
A.vobs = B.vobs;
@@ -77,6 +77,7 @@ elseif isnumeric(B) && isreal(B) && isequal(length(B),1) && isa(C,'dynSeries')
% division of a real scalar by a dynSeries object.
A = dynSeries();
A.freq = C.freq;
+ A.time = C.time;
A.init = C.init;
A.nobs = C.nobs;
A.vobs = C.vobs;
diff --git a/matlab/@dynSeries/mtimes.m b/matlab/@dynSeries/mtimes.m
index 2ae3c52b4..1668de811 100644
--- a/matlab/@dynSeries/mtimes.m
+++ b/matlab/@dynSeries/mtimes.m
@@ -39,8 +39,6 @@ function A = mtimes(B,C)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
if isa(B,'dynSeries') && isa(C,'dynSeries')
% Element by element multiplication of two dynSeries object
if ~isequal(B.vobs,C.vobs) && ~(isequal(B.vobs,1) || isequal(C.vobs,1))
@@ -58,6 +56,7 @@ if isa(B,'dynSeries') && isa(C,'dynSeries')
A = dynSeries();
A.freq = B.freq;
A.init = B.init;
+ A.time = B.time;
A.nobs = max(B.nobs,C.nobs);
A.vobs = max(B.vobs,C.vobs);
A.name = repmat({'--NA--'},A.vobs,1);
@@ -68,6 +67,7 @@ elseif isnumeric(C) && isreal(C) && isequal(length(C),1) && isa(B,'dynSeries')
A = dynSeries();
A.freq = B.freq;
A.init = B.init;
+ A.time = B.time;
A.nobs = B.nobs;
A.vobs = B.vobs;
A.name = repmat({'--NA--'},A.vobs,1);
@@ -78,6 +78,7 @@ elseif isnumeric(B) && isreal(B) && isequal(length(B),1) && isa(C,'dynSeries')
A = dynSeries();
A.freq = C.freq;
A.init = C.init;
+ A.time = C.time;
A.nobs = C.nobs;
A.vobs = C.vobs;
A.name = repmat({'--NA--'},A.vobs,1);
diff --git a/matlab/@dynSeries/numel.m b/matlab/@dynSeries/numel.m
index 62542dbd3..e53acd80a 100644
--- a/matlab/@dynSeries/numel.m
+++ b/matlab/@dynSeries/numel.m
@@ -1,2 +1,20 @@
function n = numel(obj, varargin)
- n = 1;
\ No newline at end of file
+
+% 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 .
+
+n = 1;
\ No newline at end of file
diff --git a/matlab/@dynSeries/private/horzcat2.m b/matlab/@dynSeries/private/horzcat2.m
index f161dffb3..3f61ca484 100644
--- a/matlab/@dynSeries/private/horzcat2.m
+++ b/matlab/@dynSeries/private/horzcat2.m
@@ -108,5 +108,6 @@ else
c.data = [c.data; NaN(b_last_date-c_last_date,c.vobs)];
end
a.data = [b.data, c.data];
- a.time = unique([b.time, c.time]);
-end
\ No newline at end of file
+ a.time = unique(b.time.append(c.time));
+end
+a.nobs = size(a.data,1);
\ No newline at end of file
diff --git a/matlab/@dynSeries/subsref.m b/matlab/@dynSeries/subsref.m
index 30bb89e81..aa75632d1 100644
--- a/matlab/@dynSeries/subsref.m
+++ b/matlab/@dynSeries/subsref.m
@@ -1,4 +1,4 @@
-function us = subsref(ts, S)
+function B = subsref(A, S)
%@info:
%! @deftypefn {Function File} {@var{us} =} subsref (@var{ts},S)
%! @anchor{@dynSeries/subsref}
@@ -44,7 +44,7 @@ function us = subsref(ts, S)
%! @end deftypefn
%@eod:
-% Copyright (C) 2011, 2012 Dynare Team
+% Copyright (C) 2011, 2012, 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -61,100 +61,88 @@ function us = subsref(ts, S)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
-if length(S)==1 && isequal(S.type,'.')
- switch S.subs
+switch S(1).type
+ case '.'
+ switch S(1).subs
case {'data','nobs','vobs','name','tex','freq','time','init'} % Public members.
- us = builtin('subsref', ts, S);
+ B = builtin('subsref', A, S(1));
case {'log','exp','ygrowth','qgrowth','ydiff','qdiff'} % Give "dot access" to public methods.
- us = feval(S.subs,ts);
- case {'save'}
+ B = feval(S(1).subs,A);
+ case {'save'} % Save dynSeries object on disk (default is a csv file).
us = NaN;
- save(ts);
+ if length(S)==2 && strcmp(S(2).type,'()')
+ save(A,S(2).subs{:});
+ S = shiftS(S);
+ else
+ save(A);
+ end
otherwise % Extract a sub-object by selecting one variable.
- ndx = strmatch(S.subs,ts.name);
+ ndx = strmatch(S(1).subs,A.name,'exact');
if ~isempty(ndx)
- us = dynSeries();
- us.data = ts.data(:,ndx);
- us.name = deblank(ts.name(ndx,:));
- us.tex = deblank(ts.tex(ndx,:));
- us.nobs = ts.nobs;
- us.vobs = 1;
- us.freq = ts.freq;
- us.init = ts.init;
- return
+ B = dynSeries();
+ B.data = A.data(:,ndx);
+ B.name = deblank(A.name(ndx,:));
+ B.tex = deblank(A.tex(ndx,:));
+ B.nobs = A.nobs;
+ B.vobs = 1;
+ B.freq = A.freq;
+ B.init = A.init;
+ B.time = A.time;
else
error('dynSeries::subsref: Unknown public method, public member or variable!')
end
- end
- return
-end
-
-if length(S)==1 && isequal(S.type,'()')
- if ischar(S.subs{1})
- us = dynSeries(S.subs{1});
- else
- % Extract a sub-object by selecting a sub-sample.
- if size(ts.data,2)>1
- S.subs = [S.subs, ':'];
+ end
+ case '()'
+ if ischar(S(1).subs{1})
+ % If ts is an empty dynSeries object, populate this object by reading data in a file.
+ if isempty(A)
+ B = dynSeries(S(1).subs{1});
+ else
+ error(['dynSeries::subsref: dynSeries object ''' inputname(1) ''' is not empty!'])
+ end
+ elseif isa(S(1).subs{1},'dynDates')
+ % Extract a subsample using a dynDates object
+ [junk,tdx] = intersect(A.time.time,S(1).subs{1}.time,'rows');
+ B = dynSeries();
+ B.data = A.data(tdx,:);
+ B.name = deblank(A.name);
+ B.tex = deblank(A.tex);
+ B.nobs = length(tdx);
+ B.vobs = A.vobs;
+ B.freq = A.freq;
+ B.init = A.init+tdx(1);
+ B.time = A.time(tdx,:);
+ elseif isvector(S(1).subs{1}) && all(isint(S(1).subs{1}))
+ % Extract a subsample using a vector of integers (observation index).
+ if all(S(1).subs{1}>0) && all(S(1).subs{1}<=A.nobs)
+ if size(A.data,2)>1
+ S(1).subs = [S(1).subs, ':'];
+ end
+ B.data = builtin('subsref', A.data, S(1));
+ B.nobs = size(B.data,1);
+ B.vobs = A.vobs;
+ B.freq = A.freq;
+ B.time = builtin('subsref', A.time, S(1));
+ B.init = A.init+S(1).subs{1}(1);
+ B.name = A.name;
+ B.tex = A.tex;
+ else
+ error('dynSeries::subsref: Indices are out of bounds!')
end
- us.data = builtin('subsref', ts.data, S);
- us.nobs = size(us.data,1);
- us.vobs = ts.vobs;
- us.freq = ts.freq;
- us.time = builtin('subsref', ts.time, S);
- us.init = ts.init+S.subs{1}(1);
- us.name = ts.name;
- us.tex = ts.tex;
- return
- end
-end
-
-if (length(S)==2) && (isequal(S(1).subs,'init'))
- if isequal(S(2).type,'.') && ( isequal(S(2).subs,'freq') || isequal(S(2).subs,'time') )
- us = builtin('subsref', ts.init, S(2));
else
- error('dynSeries:subsref:: I don''t understand what you are trying to do!')
+ error('dynSeries::subsref: I have no idea of what you are trying to do!')
end
- return
+ case '{}'
+ B = extract(A,S(1).subs{:});
+ otherwise
+ error('dynSeries::subsref: What the Hell are you doin'' here?!')
end
-if (length(S)==2) && (isequal(S(1).type,'.')) && (isequal(S(1).subs,'data')) && (isequal(S(2).type,'()'))
- us = builtin('subsref',ts.data,S(2));
- return
+S = shiftS(S);
+if ~isempty(S)
+ B = subsref(B, S);
end
-if (length(S)==1) && isequal(S(1).type,'{}')
- us = extract(ts,S(1).subs{:});
- return
-end
-
-if (length(S)==2) && isequal(S(1).type,'{}')
- us = extract(ts,S(1).subs{:});
- us = subsref(us, S(2));
- return
-end
-
-
-if (length(S)==2) && isequal(S(1).subs,'save') && isequal(S(1).type,'.') && isequal(S(2).type,'()')
- us = NaN;
- save(ts,S(2).subs{:});
- return
-end
-
-if (length(S)==2) && isequal(S(1).subs,'set_names') && isequal(S(1).type,'.') && isequal(S(2).type,'()')
- us = set_names(ts,S(2).subs{:});
- return
-end
-
-if (length(S)==2) && isequal(S(1).subs,'name') && isequal(S(1).type,'.') && isequal(S(2).type,'{}')
- us = ts.name{S(2).subs{1}};
- return
-end
-
-
-
%@test:1
%$ % Define a data set.
%$ A = [transpose(1:10),2*transpose(1:10)];
@@ -376,3 +364,34 @@ end
%$
%$ T = all(t);
%@eof:8
+
+%@test:9
+%$ % Define a data set.
+%$ A = [transpose(1:60),2*transpose(1:60),3*transpose(1:60)];
+%$
+%$ % Define names
+%$ A_name = {'A1';'A2';'B1'};
+%$
+%$ % Instantiate a time series object.
+%$ ts1 = dynSeries(A,'1971Q1',A_name,[]);
+%$
+%$ % Define the range of a subsample.
+%$ range = dynDate('1971Q2'):dynDate('1971Q4');
+%$ % Call the tested method.
+%$ a = ts1(range);
+%$
+%$ % Expected results.
+%$ e.data = A(2:4,:);
+%$ e.nobs = 3;
+%$ e.vobs = 3;
+%$ e.name = {'A1';'A2';'B1'};
+%$ e.freq = 4;
+%$ e.init = dynDate('1971Q2');
+%$
+%$ t(1) = dyn_assert(e.data,a.data);
+%$ t(2) = dyn_assert(e.nobs,a.nobs);
+%$ t(3) = dyn_assert(e.vobs,a.vobs);
+%$ t(4) = dyn_assert(e.name,a.name);
+%$ t(5) = dyn_assert(e.init,a.init);
+%$ T = all(t);
+%@eof:9
diff --git a/matlab/@dynSeries/uminus.m b/matlab/@dynSeries/uminus.m
index 4c7aeccd9..d5ec2222c 100644
--- a/matlab/@dynSeries/uminus.m
+++ b/matlab/@dynSeries/uminus.m
@@ -39,14 +39,13 @@ function A = uminus(B)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
A = dynSeries();
A.freq = B.freq;
A.nobs = B.nobs;
A.vobs = B.vobs;
A.init = B.init;
+A.time = B.time;
A.name = repmat({'--NA--'},A.vobs,1);
A.data = -(B.data);
diff --git a/matlab/ep/extended_path.m b/matlab/ep/extended_path.m
index 346b0ca15..7782a53d3 100644
--- a/matlab/ep/extended_path.m
+++ b/matlab/ep/extended_path.m
@@ -123,6 +123,17 @@ t = 0;
hh = dyn_waitbar(0,'Please wait. Extended Path simulations...');
set(hh,'Name','EP simulations.');
+% hybrid correction
+pfm.hybrid_order = options_.ep.stochastic.hybrid_order;
+if pfm.hybrid_order
+ oo_.dr = set_state_space(oo_.dr,M_,options_);
+ options = options_;
+ options.order = pfm.hybrid_order;
+ pfm.dr = resol(0,M_,options,oo_);
+else
+ pfm.dr = [];
+end
+
% Main loop.
while (t.
+
+ flag = 0;
+ err = 0;
+ stop = 0;
+
+ params = pfm.params;
+ steady_state = pfm.steady_state;
+ ny = pfm.ny;
+ periods = pfm.periods;
+ dynamic_model = pfm.dynamic_model;
+ lead_lag_incidence = pfm.lead_lag_incidence;
+ nyp = pfm.nyp;
+ nyf = pfm.nyf;
+ i_cols_1 = pfm.i_cols_1;
+ i_cols_A1 = pfm.i_cols_A1;
+ i_cols_j = pfm.i_cols_j;
+ i_cols_T = nonzeros(lead_lag_incidence(1:2,:)');
+ hybrid_order = pfm.hybrid_order;
+ dr = pfm.dr;
+
+ maxit = pfm.maxit_;
+ tolerance = pfm.tolerance;
+ verbose = pfm.verbose;
+
+ number_of_shocks = size(exo_simul,2);
+
+ [nodes,weights] = gauss_hermite_weights_and_nodes(nnodes);
+
+ % make sure that there is a node equal to zero
+ % and permute nodes and weights to have zero first
+ k = find(abs(nodes) < 1e-12);
+ if ~isempty(k)
+ nodes = [nodes(k); nodes(1:k-1); nodes(k+1:end)];
+ weights = [weights(k); weights(1:k-1); weights(k+1:end)];
+ else
+ error('there is no nodes equal to zero')
+ end
+
+ if number_of_shocks>1
+ nodes = repmat(nodes,1,number_of_shocks)*chol(pfm.Sigma);
+ % to be fixed for Sigma ~= I
+ for i=1:number_of_shocks
+ rr(i) = {nodes(:,i)};
+ ww(i) = {weights};
+ end
+ nodes = cartesian_product_of_sets(rr{:});
+ weights = prod(cartesian_product_of_sets(ww{:}),2);
+ nnodes = nnodes^number_of_shocks;
+ else
+ nodes = nodes*sqrt(pfm.Sigma);
+ end
+
+ if hybrid_order > 0
+ if hybrid_order == 2
+ h_correction = 0.5*dr.ghs2(dr.inv_order_var);
+ end
+ end
+
+ if verbose
+ disp ([' -----------------------------------------------------']);
+ disp (['MODEL SIMULATION :']);
+ fprintf('\n');
+ end
+
+ z = endo_simul(find(lead_lag_incidence'));
+ [d1,jacobian] = dynamic_model(z,exo_simul,params,steady_state,2);
+
+ % Each column of Y represents a different world
+ % The upper right cells are unused
+ % The first row block is ny x 1
+ % The second row block is ny x nnodes
+ % The third row block is ny x nnodes^2
+ % and so on until size ny x nnodes^order
+ world_nbr = 1+(nnodes-1)*order;
+ Y = repmat(endo_simul(:),1,world_nbr);
+
+ % The columns of A map the elements of Y such that
+ % each block of Y with ny rows are unfolded column wise
+ dimension = ny*(order+(nnodes-1)*(order-1)*order/2+(periods-order)*world_nbr);
+ if order == 0
+ i_upd_r = (1:ny*periods);
+ i_upd_y = i_upd_r + ny;
+ else
+ i_upd_r = zeros(dimension,1);
+ i_upd_y = i_upd_r;
+ i_upd_r(1:ny) = (1:ny);
+ i_upd_y(1:ny) = ny+(1:ny);
+ i1 = ny+1;
+ i2 = 2*ny;
+ n1 = ny+1;
+ n2 = 2*ny;
+ for i=2:periods
+ k = n1:n2;
+ for j=1:(1+(nnodes-1)*min(i-1,order))
+ i_upd_r(i1:i2) = (n1:n2)+(j-1)*ny*periods;
+ i_upd_y(i1:i2) = (n1:n2)+ny+(j-1)*ny*(periods+2);
+ i1 = i2+1;
+ i2 = i2+ny;
+ end
+ n1 = n2+1;
+ n2 = n2+ny;
+ end
+ end
+ icA = [find(lead_lag_incidence(1,:)) find(lead_lag_incidence(2,:))+world_nbr*ny ...
+ find(lead_lag_incidence(3,:))+2*world_nbr*ny]';
+ h1 = clock;
+ for iter = 1:maxit
+ h2 = clock;
+ A1 = sparse([],[],[],ny*(order+(nnodes-1)*(order-1)*order/2),dimension,(order+1)*world_nbr*nnz(jacobian));
+ res = zeros(ny,periods,world_nbr);
+ i_rows = 1:ny;
+ i_cols = find(lead_lag_incidence');
+ i_cols_p = i_cols(1:nyp);
+ i_cols_s = i_cols(nyp+(1:ny));
+ i_cols_f = i_cols(nyp+ny+(1:nyf));
+ i_cols_A = i_cols;
+ i_cols_Ap0 = i_cols_p;
+ i_cols_As = i_cols_s;
+ i_cols_Af0 = i_cols_f - ny;
+ i_hc = i_cols_f - 2*ny;
+ for i = 1:order+1
+ i_w_p = 1;
+ for j = 1:(1+(nnodes-1)*(i-1))
+ innovation = exo_simul;
+ if i <= order && j == 1
+ % first world, integrating future shocks
+ for k=1:nnodes
+ if i == 2
+ i_cols_Ap = i_cols_Ap0;
+ elseif i > 2
+ i_cols_Ap = i_cols_Ap0 + ny*(i-2+(nnodes- ...
+ 1)*(i-2)*(i-3)/2);
+ end
+ if k == 1
+ i_cols_Af = i_cols_Af0 + ny*(i-1+(nnodes-1)*i*(i-1)/ ...
+ 2);
+ else
+ i_cols_Af = i_cols_Af0 + ny*(i-1+(nnodes-1)*i*(i-1)/ ...
+ 2+(i-1)*(nnodes-1) ...
+ + k - 1);
+ end
+ if i > 1
+ innovation(i+1,:) = nodes(k,:);
+ end
+ if k == 1
+ k1 = 1;
+ else
+ k1 = (nnodes-1)*(i-1)+k;
+ end
+ if hybrid_order == 2 && (k > 1 || i == order)
+ y = [Y(i_cols_p,1);
+ Y(i_cols_s,1);
+ Y(i_cols_f,k1)+h_correction(i_hc)];
+ else
+ y = [Y(i_cols_p,1);
+ Y(i_cols_s,1);
+ Y(i_cols_f,k1)];
+ end
+ [d1,jacobian] = dynamic_model(y,innovation,params,steady_state,i+1);
+ if i == 1
+ % in first period we don't keep track of
+ % predetermined variables
+ i_cols_A = [i_cols_As - ny; i_cols_Af];
+ A1(i_rows,i_cols_A) = A1(i_rows,i_cols_A) + weights(k)*jacobian(:,i_cols_1);
+ else
+ i_cols_A = [i_cols_Ap; i_cols_As; i_cols_Af];
+ A1(i_rows,i_cols_A) = A1(i_rows,i_cols_A) + weights(k)*jacobian(:,i_cols_j);
+ end
+ res(:,i,1) = res(:,i,1)+weights(k)*d1;
+ end
+ elseif j > 1 + (nnodes-1)*(i-2)
+ % new world, using previous state of world 1 and hit
+ % by shocks from nodes
+ i_cols_Ap = i_cols_Ap0 + ny*(i-2+(nnodes-1)*(i-2)*(i-3)/2);
+ i_cols_Af = i_cols_Af0 + ny*(i+(nnodes-1)*i*(i-1)/2+j-2);
+ k = j - (nnodes-1)*(i-2);
+ innovation(i+1,:) = nodes(k,:);
+ y = [Y(i_cols_p,1);
+ Y(i_cols_s,j);
+ Y(i_cols_f,j)];
+ [d1,jacobian] = dynamic_model(y,innovation,params,steady_state,i+1);
+ i_cols_A = [i_cols_Ap; i_cols_As; i_cols_Af];
+ A1(i_rows,i_cols_A) = jacobian(:,i_cols_j);
+ res(:,i,j) = d1;
+ i_cols_Af = i_cols_Af + ny;
+ else
+ % existing worlds other than 1
+ i_cols_Ap = i_cols_Ap0 + ny*(i-2+(nnodes-1)*(i-2)*(i-3)/2+j-1);
+ i_cols_Af = i_cols_Af0 + ny*(i+(nnodes-1)*i*(i-1)/2+j-2);
+ y = [Y(i_cols_p,j);
+ Y(i_cols_s,j);
+ Y(i_cols_f,j)];
+ [d1,jacobian] = dynamic_model(y,innovation,params,steady_state,i+1);
+ i_cols_A = [i_cols_Ap; i_cols_As; i_cols_Af];
+ A1(i_rows,i_cols_A) = jacobian(:,i_cols_j);
+ res(:,i,j) = d1;
+ i_cols_Af = i_cols_Af + ny;
+ end
+ i_rows = i_rows + ny;
+ if mod(j,nnodes) == 0
+ i_w_p = i_w_p + 1;
+ end
+ if i > 1
+ i_cols_As = i_cols_As + ny;
+ end
+ end
+ i_cols_p = i_cols_p + ny;
+ i_cols_s = i_cols_s + ny;
+ i_cols_f = i_cols_f + ny;
+ end
+ nzA = cell(periods,world_nbr);
+ parfor j=1:world_nbr
+ i_rows_y = find(lead_lag_incidence')+(order+1)*ny;
+ offset_c = ny*(order+(nnodes-1)*(order-1)*order/2+j-1);
+ offset_r = (j-1)*ny;
+ for i=order+2:periods
+ [d1,jacobian] = dynamic_model(Y(i_rows_y,j), ...
+ exo_simul,params, ...
+ steady_state,i+1);
+ if i == periods
+ [ir,ic,v] = find(jacobian(:,i_cols_T));
+ else
+ [ir,ic,v] = find(jacobian(:,i_cols_j));
+ end
+ nzA{i,j} = [offset_r+ir,offset_c+icA(ic), v]';
+ res(:,i,j) = d1;
+ i_rows_y = i_rows_y + ny;
+ offset_c = offset_c + world_nbr*ny;
+ offset_r = offset_r + world_nbr*ny;
+ end
+ end
+ err = max(abs(res(i_upd_r)));
+ if err < tolerance
+ stop = 1;
+ if verbose
+ fprintf('\n') ;
+ disp([' Total time of simulation :' num2str(etime(clock,h1))]) ;
+ fprintf('\n') ;
+ disp([' Convergency obtained.']) ;
+ fprintf('\n') ;
+ end
+ flag = 0;% Convergency obtained.
+ endo_simul = reshape(Y(:,1),ny,periods+2);%Y(ny+(1:ny),1);
+ % figure;plot(Y(16:ny:(periods+2)*ny,:))
+ % pause
+ break
+ end
+ A2 = [nzA{:}]';
+ A = [A1; sparse(A2(:,1),A2(:,2),A2(:,3),ny*(periods-order-1)*world_nbr,dimension)];
+ dy = -A\res(i_upd_r);
+ Y(i_upd_y) = Y(i_upd_y) + dy;
+ end
+
+ if ~stop
+ if verbose
+ fprintf('\n') ;
+ disp([' Total time of simulation :' num2str(etime(clock,h1))]) ;
+ fprintf('\n') ;
+ disp(['WARNING : maximum number of iterations is reached (modify options_.maxit_).']) ;
+ fprintf('\n') ;
+ end
+ flag = 1;% more iterations are needed.
+ endo_simul = 1;
+ end
+ if verbose
+ disp (['-----------------------------------------------------']) ;
+ end
\ No newline at end of file
diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m
index 34681433d..edff60294 100644
--- a/matlab/global_initialization.m
+++ b/matlab/global_initialization.m
@@ -177,12 +177,14 @@ ep.set_dynare_seed_to_default = 1;
ep.stack_solve_algo = 4;
% Stochastic extended path related options.
ep.stochastic.method = '';
+ep.stochastic.algo = 0;
ep.stochastic.quadrature.ortpol = 'hermite';
ep.stochastic.order = 0;
ep.stochastic.quadrature.nodes = 5;
ep.stochastic.quadrature.pruned.status = 0;
ep.stochastic.quadrature.pruned.relative = 1e-5;
ep.stochastic.quadrature.pruned.level = 1e-5;
+ep.stochastic.hybrid_order = 0;
% Copy ep structure in options_ global structure
options_.ep = ep;
@@ -345,6 +347,7 @@ options_.filter_step_ahead = [];
options_.filtered_vars = 0;
options_.first_obs = 1;
options_.kalman_algo = 0;
+options_.fast_kalman = 0;
options_.kalman_tol = 1e-10;
options_.use_univariate_filters_if_singularity_is_detected = 1;
options_.riccati_tol = 1e-6;
diff --git a/matlab/reports/@graph/createGraph.m b/matlab/reports/@graph/createGraph.m
index d2c663db2..763e3f348 100644
--- a/matlab/reports/@graph/createGraph.m
+++ b/matlab/reports/@graph/createGraph.m
@@ -3,10 +3,10 @@ function o = createGraph(o)
% Create the graph
%
% INPUTS
-% o - Graph Object
+% o [graph] graph object
%
% OUTPUTS
-% o - Graph Object
+% o [graph] graph object
%
% SPECIAL REQUIREMENTS
% none
@@ -51,29 +51,34 @@ end
%set(h, 'units', 'normalized', 'outerposition', [0 0 1 1]);
if strcmpi(o.seriestouse, 'all')
- data = o.data.data;
+ ds = o.data;
else
- data = o.data{o.seriestouse{:}}.data;
+ ds = o.data{o.seriestouse{:}};
end
-x=[1:1:o.data.nobs];
-xlabels=getDatesCellStringArray(o.data.time);
+if ~strcmp(o.xrange, 'all')
+ dd1 = dynDate(o.xrange{1});
+ dd2 = dynDate(o.xrange{2});
+ ds = ds(dd1:dd2);
+end
+data = ds.data;
+
+x = 1:1:ds.nobs;
+xlabels = getDatesCellStringArray(ds.time);
plot(x, data);
-if ~isempty(o.shade)
- x1 = strmatch(lower(o.shade{1}), xlabels, 'exact');
- x2 = strmatch(lower(o.shade{2}), xlabels, 'exact');
- yrange = get(gca, 'YLim');
+if ~strcmp(o.yrange, 'all')
+ ylim([o.yrange{:}]);
+end
- if isempty(x1)
- error(['@graph.createGraph: ' o.shade{1} ' not in date range of ' ...
- 'provided data']);
- end
- if isempty(x2)
- error(['@graph.createGraph: ' o.shade{2} ' not in date range of ' ...
- 'provided data']);
- end
+if ~isempty(o.shade)
+ x1 = find(strcmp(o.shade{1}, xlabels));
+ x2 = find(strcmp(o.shade{2}, xlabels));
+ assert(~isempty(x1) && ~isempty(x2), ['@graph.createGraph: either ' ...
+ o.shade{1} ' or ' o.shade{2} 'is not in the date ' ...
+ 'range of data selected.']);
+ yrange = get(gca, 'YLim');
% From ShadePlotForEmpahsis (Matlab Exchange)
% use patch bc area doesn't work with matlab2tikz
@@ -85,11 +90,7 @@ set(gca,'XTick', x);
set(gca,'XTickLabel', xlabels);
if o.legend
- if strcmpi(o.seriestouse, 'all')
- lh = legend(o.data.name);
- else
- lh = legend(o.seriestouse{:});
- end
+ lh = legend(ds.name);
set(lh, 'orientation', o.legend_orientation);
set(lh, 'Location', o.legend_location);
set(lh, 'FontSize', o.legend_font_size);
@@ -109,7 +110,7 @@ if ~isempty(o.title)
end
drawnow;
-o.figname = ['figure-' num2str(cputime) '.tex'];
+o.figname = [tempname '.tex'];
disp(' converting to tex....');
matlab2tikz('filename', o.figname, ...
'showInfo', false, ...
diff --git a/matlab/reports/@graph/display.m b/matlab/reports/@graph/display.m
index 71c2b2ea2..7938abb45 100644
--- a/matlab/reports/@graph/display.m
+++ b/matlab/reports/@graph/display.m
@@ -3,7 +3,7 @@ function display(o)
% Display a Graph object
%
% INPUTS
-% none
+% o [graph] graph object
%
% OUTPUTS
% none
diff --git a/matlab/reports/@graph/graph.m b/matlab/reports/@graph/graph.m
index b8a73374e..4c9d8c14d 100644
--- a/matlab/reports/@graph/graph.m
+++ b/matlab/reports/@graph/graph.m
@@ -3,11 +3,13 @@ function o = graph(varargin)
% Graph Class Constructor
%
% INPUTS
-% 0 args => empty graph
-% 1 arg (graph class) => copy object
+% varargin 0 args : empty graph object
+% 1 arg : must be graph object (return a copy of arg)
+% > 1 args: option/value pairs (see structure below for
+% options)
%
% OUTPUTS
-% none
+% o [graph] graph object
%
% SPECIAL REQUIREMENTS
% none
@@ -42,7 +44,9 @@ o.footnote = '';
o.figname = '';
o.data = '';
o.seriestouse = 'all';
-o.shade = ''; %{1959q1:1964q4}
+o.shade = '';
+o.xrange = 'all';
+o.yrange = 'all';
o.grid = true;
diff --git a/matlab/reports/@graph/write.m b/matlab/reports/@graph/write.m
index aecf8ab08..7eb10c731 100644
--- a/matlab/reports/@graph/write.m
+++ b/matlab/reports/@graph/write.m
@@ -3,10 +3,11 @@ function o = write(o, fid)
% Write a Graph object
%
% INPUTS
-% fid - int, file id
+% o [graph] graph object
+% fid [integer] file id
%
% OUTPUTS
-% o - this
+% o [graph] graph object
%
% SPECIAL REQUIREMENTS
% none
diff --git a/matlab/reports/@pages/addPage.m b/matlab/reports/@pages/addPage.m
index 174d39b23..e248cba7a 100644
--- a/matlab/reports/@pages/addPage.m
+++ b/matlab/reports/@pages/addPage.m
@@ -19,10 +19,4 @@ function ps = addPage(ps, varargin)
% along with Dynare. If not, see .
ps.objArray = ps.objArray.addObj(page(varargin{:}));
-%assert(nargin >= 1 && nargin <= 3)
-%if nargin == 1
-% ps.objArray = ps.objArray.addObj(page());
-%else
-% ps.objArray = ps.objArray.addObj(varargin{:});
-%end
end
\ No newline at end of file
diff --git a/matlab/reports/@report/addGraph.m b/matlab/reports/@report/addGraph.m
new file mode 100644
index 000000000..a9b247b32
--- /dev/null
+++ b/matlab/reports/@report/addGraph.m
@@ -0,0 +1,36 @@
+function o = addGraph(o, varargin)
+%function o = addGraph(o, varargin)
+% Add a graph to the current section of the current page in the report
+%
+% INPUTS
+% o [report] report object
+% varargin arguments to @section/addGraph.m
+%
+% OUTPUTS
+% o [report] updated report object
+%
+% SPECIAL REQUIREMENTS
+% none
+
+% 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 .
+
+lastPage = o.pages.numPages();
+lastSection = o.pages(lastPage).numSections();
+o.pages(lastPage).sections(lastSection) = ...
+ o.pages(lastPage).sections(lastSection).addGraph(varargin{:});
+end
diff --git a/matlab/reports/@report/addPage.m b/matlab/reports/@report/addPage.m
index f5f2c2468..0f65bead4 100644
--- a/matlab/reports/@report/addPage.m
+++ b/matlab/reports/@report/addPage.m
@@ -1,14 +1,13 @@
function o = addPage(o, varargin)
%function o = addPage(o, varargin)
-% Add a page to the Cell Array of pages in the report
+% Add a page to the report
%
% INPUTS
-% 1 args => add empty page
-% 2 args => add given page
-% 3 args => add page at index
+% o [report] report object
+% varargin arguments to @section/addGraph.m
%
% OUTPUTS
-% updated report object
+% o [report] updated report object
%
% SPECIAL REQUIREMENTS
% none
@@ -30,22 +29,6 @@ function o = addPage(o, varargin)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-%assert(nargin >= 1 && nargin <= 3, ['incorrect number of arguments passed ' ...
-% 'to addPage']);
-%assert(isa(r, 'report'), 'First argument must be a report object');
-%if nargin > 1
-% assert(isa(varargin{1},'page'), ['Optional 2nd arg to addPage must be a ' ...
-% 'Page']);
-% if nargin > 2
-% assert(isnumeric(varargin{2}), ['Optional 3rd arg to addPage must be ' ...
-% 'an index']);
-% end
-%end
-
-if nargin == 1
- o.pages = o.pages.addPage('orientation', o.orientation, 'paper', o.paper);
-else
- o.pages = o.pages.addPage('orientation', o.orientation, 'paper', ...
- o.paper, varargin{:});
-end
+o.pages = o.pages.addPage('orientation', o.orientation, 'paper', o.paper, ...
+ varargin{:});
end
diff --git a/matlab/@dynSeries/private/isint.m b/matlab/reports/@report/addSection.m
similarity index 58%
rename from matlab/@dynSeries/private/isint.m
rename to matlab/reports/@report/addSection.m
index 0338f2393..a0667a5ec 100644
--- a/matlab/@dynSeries/private/isint.m
+++ b/matlab/reports/@report/addSection.m
@@ -1,5 +1,18 @@
-function b = isint(a)
-% Copyright (C) 2012 Dynare Team
+function o = addSection(o, varargin)
+%function o = addSection(o, varargin)
+% Add a section to the current page in the report
+%
+% INPUTS
+% o [report] report object
+% varargin arguments to @section/addGraph.m
+%
+% OUTPUTS
+% o [report] updated report object
+%
+% SPECIAL REQUIREMENTS
+% none
+
+% Copyright (C) 2013 Dynare Team
%
% This file is part of Dynare.
%
@@ -16,6 +29,6 @@ function b = isint(a)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-% AUTHOR(S) stephane DOT adjemian AT univ DASH lemans DOT fr
-
-b = (floor(a)==a);
\ No newline at end of file
+o.pages(o.pages.numPages()) = ...
+ o.pages(o.pages.numPages()).addSection(varargin{:});
+end
diff --git a/matlab/reports/@report/addTable.m b/matlab/reports/@report/addTable.m
new file mode 100644
index 000000000..15199b4bd
--- /dev/null
+++ b/matlab/reports/@report/addTable.m
@@ -0,0 +1,36 @@
+function o = addTable(o, varargin)
+%function o = addTable(o, varargin)
+% Add a table to the current section of the current page in the report
+%
+% INPUTS
+% o [report] report object
+% varargin arguments to @section/addTable.m
+%
+% OUTPUTS
+% o [report] updated report object
+%
+% SPECIAL REQUIREMENTS
+% none
+
+% 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 .
+
+lastPage = o.pages.numPages();
+lastSection = o.pages(lastPage).numSections();
+o.pages(lastPage).sections(lastSection) = ...
+ o.pages(lastPage).sections(lastSection).addTable(varargin{:});
+end
diff --git a/matlab/reports/@report/display.m b/matlab/reports/@report/display.m
index 5c1f47148..60c3f11f4 100644
--- a/matlab/reports/@report/display.m
+++ b/matlab/reports/@report/display.m
@@ -3,7 +3,7 @@ function display(o)
% Display a Report object
%
% INPUTS
-% none
+% o [report] report object
%
% OUTPUTS
% none
diff --git a/matlab/reports/@report/numPages.m b/matlab/reports/@report/numPages.m
index 27bc12ed0..5863c55e1 100644
--- a/matlab/reports/@report/numPages.m
+++ b/matlab/reports/@report/numPages.m
@@ -1,12 +1,12 @@
-function np = numPages(r)
-%function np = numPages(r)
+function n = numPages(o)
+%function n = numPages(o)
% return the number of pages currently in the report
%
% INPUTS
-% none
+% o [report] report object
%
% OUTPUTS
-% none
+% n [integer] number of pages in the report object
%
% SPECIAL REQUIREMENTS
% none
@@ -28,5 +28,5 @@ function np = numPages(r)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-np = r.pages.numPages();
+n = o.pages.numPages();
end
\ No newline at end of file
diff --git a/matlab/reports/@report/private/validateOrientation.m b/matlab/reports/@report/private/validateOrientation.m
index 98683c36c..41bf58eed 100644
--- a/matlab/reports/@report/private/validateOrientation.m
+++ b/matlab/reports/@report/private/validateOrientation.m
@@ -3,10 +3,10 @@ function validateOrientation(orientation)
% Validate orientation string
%
% INPUTS
-% char : the orientation
+% orientation [char] orientation (one of 'portrait' or 'landscape')
%
% OUTPUTS
-% char : lowercase orientation
+% none
%
% SPECIAL REQUIREMENTS
% none
@@ -29,5 +29,6 @@ function validateOrientation(orientation)
% along with Dynare. If not, see .
assert(any(strcmpi(orientation, {'portrait', 'landscape'})), ['Valid ' ...
- 'orientation arguments are: ''portrait'' and ''landscape''.']);
+ 'orientation arguments are: ''portrait'' and ' ...
+ '''landscape''.']);
end
\ No newline at end of file
diff --git a/matlab/reports/@report/private/validatePaper.m b/matlab/reports/@report/private/validatePaper.m
index 0395db76f..73b6bb367 100644
--- a/matlab/reports/@report/private/validatePaper.m
+++ b/matlab/reports/@report/private/validatePaper.m
@@ -3,10 +3,10 @@ function validatePaper(paper)
% Validate paper string
%
% INPUTS
-% char : paper size
+% paper [char] valid LaTeX paper type
%
% OUTPUTS
-% char : lowercase paper
+% none
%
% SPECIAL REQUIREMENTS
% none
diff --git a/matlab/reports/@report/report.m b/matlab/reports/@report/report.m
index 77f3faa90..62cedefbb 100644
--- a/matlab/reports/@report/report.m
+++ b/matlab/reports/@report/report.m
@@ -3,11 +3,12 @@ function o = report(varargin)
% Report Class Constructor
%
% INPUTS
-% 1 report class object => make a copy
-% Otherwise, option/value pairs (see structure below for options)
+% varargin 0 args : empty report object
+% 1 arg : must be report object (return a copy of arg)
+% > 1 args: option/value pairs (see structure below for options)
%
% OUTPUTS
-% none
+% o [report] report object
%
% SPECIAL REQUIREMENTS
% none
diff --git a/matlab/reports/@report/write.m b/matlab/reports/@report/write.m
index 21496e2e9..39b965f19 100644
--- a/matlab/reports/@report/write.m
+++ b/matlab/reports/@report/write.m
@@ -3,10 +3,10 @@ function o = write(o)
% Write Report object
%
% INPUTS
-% o - Report Object
+% o [report] report object
%
% OUTPUTS
-% o - Report Object
+% o [report] report object
%
% SPECIAL REQUIREMENTS
% none
diff --git a/matlab/reports/@table/table.m b/matlab/reports/@table/table.m
index 95fb4fcfe..f9573c3a1 100644
--- a/matlab/reports/@table/table.m
+++ b/matlab/reports/@table/table.m
@@ -39,9 +39,8 @@ o.hlines = false;
o.vlines = false;
o.data = '';
-o.datatitles = '';
-o.seriestouse = 'all';
-o.range = '';
+o.seriestouse = '';
+o.range = {};
o.precision = 1;
if nargin == 1
@@ -69,6 +68,42 @@ elseif nargin > 1
end
end
+% Check options provided by user
+assert(ischar(o.title), '@table.table: title must be a string');
+assert(ischar(o.footnote), '@table.table: footnote must be a string');
+assert(ischar(o.config), '@table.table: config file must be a string');
+assert(islogical(o.hlines), '@table.table: hlines must be true or false');
+assert(islogical(o.vlines), '@table.table: vlines must be true or false');
+assert(isint(o.precision), '@table.table: precision must be an int');
+assert(isempty(o.range) || (iscell(o.range) && length(o.range) == 2 && ...
+ ischar(o.range{1}) && ischar(o.range{2})), ...
+ ['@table.table: range is specified as ''{''1999q1'',''999q2''}''.']);
+
+assert(~isempty(o.data), '@table.table: must provide data');
+msg = ['@table.table: data must either be a dynSeries or a cell array of ' ...
+ 'dynSeries'];
+if length(o.data) == 1
+ assert(isa(o.data, 'dynSeries'), msg);
+else
+ assert(iscell(o.data), msg);
+ for i=1:length(o.data)
+ assert(isa(o.data{i}, 'dynSeries'), msg);
+ end
+end
+
+msg = ['@table.table: series to use must either be a string or a cell array ' ...
+ 'of strings'];
+if ~isempty(o.seriestouse)
+ if length(o.seriestouse) == 1
+ assert(ischar(o.seriestouse), msg);
+ else
+ assert(iscell(o.seriestouse), msg);
+ for i=1:length(o.seriestouse)
+ assert(ischar(o.seriestouse{i}), msg);
+ end
+ end
+end
+
% Create table object
o = class(o, 'table');
end
\ No newline at end of file
diff --git a/matlab/reports/@table/write.m b/matlab/reports/@table/write.m
index bed5b945e..51673fa21 100644
--- a/matlab/reports/@table/write.m
+++ b/matlab/reports/@table/write.m
@@ -34,6 +34,12 @@ if isempty(o.data)
return
end
+if isempty(o.seriestouse)
+ ds = o.data;
+else
+ ds = o.data{o.seriestouse{:}};
+end
+
%number of left-hand columns, 1 until we allow the user to group data,
% e.g.: GDP Europe
% GDP France
@@ -45,7 +51,7 @@ disp('creating table.........');
fprintf(fid, '%% Table Object\n');
fprintf(fid, '\\begin{tabular}{l');
-dates = o.data.time;
+dates = ds.time;
ndates = dates.ndat;
for i=1:ndates
@@ -57,6 +63,7 @@ if ~isempty(o.title)
end
fprintf(fid, '\\toprule%%\n');
+% Column Headers
datedata = dates.time;
years = unique(datedata(:, 1));
thdr = num2cell(years, size(years, 1));
@@ -111,9 +118,10 @@ switch dates.freq
end
fprintf(fid, '%%\n');
-vars = o.data.name;
+% Table Data
+vars = ds.name;
nvars = size(vars);
-data = o.data.data;
+data = ds.data;
assert(isint(o.precision));
precision = 10^o.precision;
dataString = [' & %.' num2str(o.precision) 'f'];
diff --git a/matlab/reports/shiftS.m b/matlab/shiftS.m
similarity index 92%
rename from matlab/reports/shiftS.m
rename to matlab/shiftS.m
index 044bb4460..41ff3d3ce 100644
--- a/matlab/reports/shiftS.m
+++ b/matlab/shiftS.m
@@ -1,5 +1,7 @@
function S = shiftS(S)
%function S = shiftS(S)
+%
+% Removes the first element of a one dimensional cell array.
% Copyright (C) 2013 Dynare Team
%
diff --git a/tests/dynseries_test_data.m b/tests/dynseries_test_data.m
new file mode 100644
index 000000000..1894b3b42
--- /dev/null
+++ b/tests/dynseries_test_data.m
@@ -0,0 +1,5 @@
+FREQ__ = 4;
+INIT__ = '1994Q3';
+
+azert = randn(100,1);
+yuiop = randn(100,1);
\ No newline at end of file
diff --git a/tests/dynseries_test_data.mat b/tests/dynseries_test_data.mat
new file mode 100644
index 000000000..f9fc80a04
Binary files /dev/null and b/tests/dynseries_test_data.mat differ
diff --git a/tests/ep/rbcii.mod b/tests/ep/rbcii.mod
index a35c4fdce..881ab0357 100644
--- a/tests/ep/rbcii.mod
+++ b/tests/ep/rbcii.mod
@@ -22,9 +22,7 @@ effstar = 1.000;
sigma = 0.100;
-@#if extended_path_version
- rho = 0.800;
-@#endif
+rho = 0.800;
model(use_dll);