diff --git a/.gitmodules b/.gitmodules index ff19553c7..b40e6ab87 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,3 +13,7 @@ [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 = git@github.com:DynareTeam/dates.git + branch = old-oop-syntax diff --git a/matlab/@dates/append.m b/matlab/@dates/append.m deleted file mode 100644 index 67ac93c13..000000000 --- a/matlab/@dates/append.m +++ /dev/null @@ -1,102 +0,0 @@ -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 . - -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) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(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) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/char.m b/matlab/@dates/char.m deleted file mode 100644 index bdde032dc..000000000 --- a/matlab/@dates/char.m +++ /dev/null @@ -1,35 +0,0 @@ -function s = char(dd) - -% Given a one element dates object, returns a string with the formatted date. -% -% INPUTS -% o dd dates object with one element -% -% OUTPUTS -% o s a string -% -% SPECIAL REQUIREMENTS -% none - -% Copyright (C) 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 . - -if length(dd)>1 - error('The input argument must be a singleton dates object!') -end - -s = date2string(dd.time, dd.freq); \ No newline at end of file diff --git a/matlab/@dates/colon.m b/matlab/@dates/colon.m deleted file mode 100644 index 218a9f8db..000000000 --- a/matlab/@dates/colon.m +++ /dev/null @@ -1,192 +0,0 @@ -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 . - -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) = dassert(d3.time,e.time); -%$ t(2) = dassert(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) = dassert(d.time,e.time); -%$ t(2) = dassert(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) = dassert(d.time,e.time); -%$ t(2) = dassert(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) = dassert(d.time,e.time); -%$ t(2) = dassert(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) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ T = all(t); -%$ @eof:4 \ No newline at end of file diff --git a/matlab/@dates/dates.m b/matlab/@dates/dates.m deleted file mode 100644 index ea1a60444..000000000 --- a/matlab/@dates/dates.m +++ /dev/null @@ -1,311 +0,0 @@ -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 . - -% 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) - % Return an empty dates obect - return -end - -if all(cellfun(@isdates, varargin)) - % Concatenates dates in a dates object. - dd = horzcat(varargin{:}); - return -end - -if all(cellfun(@isstringdate,varargin)) - % Concatenates dates in a dates object. - tmp = cellfun(@string2date,varargin); - if all([tmp.freq]-tmp(1).freq==0) - dd.freq = tmp(1).freq; - else - error('dates::dates: Wrong calling sequence of the constructor! All dates must have common frequency.') - end - dd.ndat = length(tmp); - dd.time = transpose(reshape([tmp.time],2,dd.ndat)); - return -end - -if isequal(nargin,1) && isfreq(varargin{1}) - % Instantiate an empty dates object (only set frequency) - if ischar(varargin{1}) - dd.freq = string2freq(varargin{1}); - else - dd.freq = varargin{1}; - end - return -end - -if isequal(nargin,3) && isfreq(varargin{1}) - if ischar(varargin{1}) - dd.freq = string2freq(varargin{1}); - else - dd.freq = varargin{1}; - end - if (isnumeric(varargin{2}) && isvector(varargin{2}) && all(isint(varargin{2}))) - if isnumeric(varargin{3}) && isvector(varargin{3}) && all(isint(varargin{3})) - if all(varargin{3}>=1) && all(varargin{3}<=dd.freq) - dd.time = [varargin{2}(:), varargin{3}(:)]; - dd.ndat = size(dd.time,1); - else - error(sprintf('dates::dates: Wrong calling sequence of the constructor! Third input must contain integers between 1 and %i.',dd.freq)) - end - else - error('dates::dates: Wrong calling sequence of the constructor! Third input must be a vector of integers.') - end - else - error('dates::dates: Wrong calling sequence of the constructor! Second input must be a vector of integers.') - end - return -end - -if isequal(nargin,2) && isfreq(varargin{1}) - if ischar(varargin{1}) - dd.freq = string2freq(varargin{1}); - else - dd.freq = varargin{1}; - end - if isequal(dd.freq, 1) - if (isnumeric(varargin{2}) && isvector(varargin{2}) && isint(varargin{2})) - dd.time = [varargin{2}, ones(length(varargin{2}),1)]; - dd.ndat = size(dd.time,1); - return - else - error('dates::dates: Wrong calling sequence of the constructor! Second input must be a vector of integers.') - end - else - if isequal(size(varargin{2},2), 2) - if all(isint(varargin{2}(:,1))) && all(isint(varargin{2}(:,1))) - if all(varargin{2}(:,2)>=1) && all(varargin{2}(:,2)<=dd.freq) - dd.time = [varargin{2}(:,1), varargin{2}(:,2)]; - dd.ndat = size(dd.time,1); - else - error(sprintf('dates::dates: Wrong calling sequence of the constructor! Second column of the last input must contain integers between 1 and %i.',dd.freq)) - end - else - error('dates::dates: Wrong calling sequence! Second input argument must be an array of integers.') - end - else - error('dates::dates: Wrong calling sequence!') - end - end - return -end - -error('dates::dates: Wrong calling sequence!') - -%@test:1 -%$ % Define some dates -%$ B1 = '1945Q3'; -%$ B2 = '1950Q2'; -%$ B3 = '1950q1'; -%$ B4 = '1953Q4'; -%$ -%$ % Define expected results. -%$ e.time = [1945 3; 1950 2; 1950 1; 1953 4]; -%$ e.freq = 4; -%$ e.ndat = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B1,B2,B3,B4); -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates -%$ B1 = '1945M3'; -%$ B2 = '1950M2'; -%$ B3 = '1950M10'; -%$ B4 = '1953M12'; -%$ -%$ % Define expected results. -%$ e.time = [1945 3; 1950 2; 1950 10; 1953 12]; -%$ e.freq = 12; -%$ e.ndat = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B1,B2,B3,B4); -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define some dates -%$ B1 = '1945y'; -%$ B2 = '1950Y'; -%$ B3 = '1950a'; -%$ B4 = '1953A'; -%$ -%$ % Define expected results. -%$ e.time = [1945 1; 1950 1; 1950 1; 1953 1]; -%$ e.freq = 1; -%$ e.ndat = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B1,B2,B3,B4); -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ % Define a dates object -%$ B = dates('1950Q1'):dates('1960Q3'); -%$ -%$ -%$ % Call the tested routine. -%$ d = B(2); -%$ if isa(d,'dates') -%$ t(1) = 1; -%$ else -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); -%$ end -%$ T = all(t); -%@eof:4 - -%@test:5 -%$ % Define a dates object -%$ B = dates(4,1950,1):dates(4,1960,3); -%$ -%$ % Call the tested routine. -%$ d = B(2); -%$ if isa(d,'dates') -%$ t(1) = 1; -%$ else -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); -%$ end -%$ T = all(t); -%@eof:5 - -%@test:6 -%$ % Define a dates object -%$ B = dates(4,[1950 1]):dates(4,[1960 3]); -%$ -%$ % Call the tested routine. -%$ d = B(2); -%$ if isa(d,'dates') -%$ t(1) = 1; -%$ else -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); -%$ end -%$ T = all(t); -%@eof:6 - -%@test:7 -%$ try -%$ B = dates(4,[1950; 1950], [1; 2]); -%$ t = 1; -%$ catch -%$ t = 0; -%$ end -%$ -%$ T = all(t); -%@eof:7 - -%@test:8 -%$ try -%$ B = dates(4,[1950, 1950], [1, 2]); -%$ t = 1; -%$ catch -%$ t = 0; -%$ end -%$ -%$ T = all(t); -%@eof:8 \ No newline at end of file diff --git a/matlab/@dates/disp.m b/matlab/@dates/disp.m deleted file mode 100644 index 9c012fea4..000000000 --- a/matlab/@dates/disp.m +++ /dev/null @@ -1,49 +0,0 @@ -function disp(dd) - -% 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(dd) - fprintf('Empty dates object.\n'); - return -end - -max_displayed = 5; -first_displayed = 2; - -fprintf('\n') - end - end -else - for i=1:first_displayed - fprintf(date2string(dd.time(i,:),dd.freq)) - fprintf(', ') - end - fprintf(' ..., ') - fprintf(date2string(dd.time(dd.ndat-1,:),dd.freq)) - fprintf(', ') - fprintf(date2string(dd.time(dd.ndat,:),dd.freq)) - fprintf('>\n') -end diff --git a/matlab/@dates/display.m b/matlab/@dates/display.m deleted file mode 100644 index 2d230dc85..000000000 --- a/matlab/@dates/display.m +++ /dev/null @@ -1,49 +0,0 @@ -function display(dd) - -% 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(dd) - fprintf('%s is an empty dates object.\n', inputname(1)); - return -end - -max_displayed = 5; -first_displayed = 2; - -fprintf('%s = \n') - end - end -else - for i=1:first_displayed - fprintf(date2string(dd.time(i,:),dd.freq)) - fprintf(', ') - end - fprintf(' ..., ') - fprintf(date2string(dd.time(dd.ndat-1,:),dd.freq)) - fprintf(', ') - fprintf(date2string(dd.time(dd.ndat,:),dd.freq)) - fprintf('>\n') -end \ No newline at end of file diff --git a/matlab/@dates/double.m b/matlab/@dates/double.m deleted file mode 100644 index c991889c3..000000000 --- a/matlab/@dates/double.m +++ /dev/null @@ -1,81 +0,0 @@ -function [B, C] = double(A) % --*-- Unitary tests --*-- - -% Returns a vector of doubles with the fractional part corresponding -% to the subperiod. Used for plots and to store dates in a matrix. -% -% INPUTS -% o A dates object. -% -% OUTPUTS -% o B A.ndat*1 vector of doubles. -% o C integer scalar, the frequency (1, 4, 12 or 52). -% -% REMARKS -% Obviously the frequency is lost during the conversion. - -% 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 = A.time(:,1)+(A.time(:,2)-1)/A.freq; -if nargout>1 - C = A.freq; -end - -%@test:1 -%$ % Define a dates object -%$ qq = dates('Q'); -%$ B = qq(1950,1):qq(1951,1); -%$ -%$ % Call the tested routine. -%$ try -%$ C = double(B); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ % Define expected results. -%$ E = [ones(4,1)*1950; 1951]; -%$ E = E + [(transpose(1:4)-1)/4; 0]; -%$ if t(1) -%$ t(2) = dassert(C,E); -%$ end -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define a dates object -%$ qq = dates('Q'); -%$ -%$ % Call the tested routine. -%$ try -%$ C = NaN(2,1); -%$ C(1) = double(qq(1950,1)); -%$ C(2) = double(qq(1950,2)); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ % Define expected results. -%$ E = ones(2,1)*1950; -%$ E = E + [0; .25]; -%$ if t(1) -%$ t(2) = dassert(C,E); -%$ end -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/end.m b/matlab/@dates/end.m deleted file mode 100644 index d1f04449f..000000000 --- a/matlab/@dates/end.m +++ /dev/null @@ -1,34 +0,0 @@ -function lastIndex = end(o, k, n) - -% Overloads end keyword. -% -% INPUTS -% o [dates] dates object -% k [integer] index where end appears -% n [integer] number of indices -% -% OUTPUTS -% lastIndex [integer] last dates index -% -% 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 . - -assert(k==1 && n==1, 'dates::end: dates only has one dimension'); -lastIndex = o.ndat; \ No newline at end of file diff --git a/matlab/@dates/eq.m b/matlab/@dates/eq.m deleted file mode 100644 index 4f5b7f6de..000000000 --- a/matlab/@dates/eq.m +++ /dev/null @@ -1,102 +0,0 @@ -function C = eq(A,B) % --*-- Unitary tests --*-- - -% Overloads == operator for dates objects. -% -% INPUTS -% o A dates object with n or 1 elements. -% o B dates object with n or 1 elements. -% -% OUTPUTS -% o C column vector of max(n,1) elements (zeros or ones). - -% 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 ~isequal(nargin,2) - error('dates::eq: I need exactly two input arguments!') -end - -if ~isa(A,'dates') || ~isa(B,'dates') - error(['dates::eq: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be a dates objects!']) -end - -if ~isequal(A.freq,B.freq) - C = false; - return -end - -if isequal(A.ndat, B.ndat) - C = logical(transpose(all(transpose(eq(A.time,B.time))))); -else - if isequal(A.ndat,1) || isequal(B.ndat,1) - C = logical(transpose(all(transpose(bsxfun(@eq,A.time,B.time))))); - else - C = false; - end -end - -%@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ d2 = dates('1960Q1','1960Q2','1960Q3','1960Q4') ; -%$ d3 = dates('1950Q1','1960Q2','1950Q3','1960Q4') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1==d1; -%$ t2 = d1==d2; -%$ t3 = d1==d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,true(4,1)); -%$ t(2) = dassert(t2,false(4,1)); -%$ t(2) = dassert(t3,[true; false; true; false]); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates objects -%$ d1 = dates('1950Q1') ; -%$ d2 = dates('1960Q1') ; -%$ d3 = dates('1960Q1') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1==d1; -%$ t2 = d1==d2; -%$ t3 = d1==d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,true); -%$ t(2) = dassert(t2,false); -%$ t(2) = dassert(t3,false); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ d2 = dates('1950Q2') ; -%$ d3 = dates('1970Q1') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1==d2; -%$ t2 = d1==d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,[false; true; false; false]); -%$ t(2) = dassert(t2,false(4,1)); -%$ T = all(t); -%@eof:3 diff --git a/matlab/@dates/ge.m b/matlab/@dates/ge.m deleted file mode 100644 index 6593bc191..000000000 --- a/matlab/@dates/ge.m +++ /dev/null @@ -1,127 +0,0 @@ -function C = ge(A,B) % --*-- Unitary tests --*-- - -% Overloads the >= operator for dates objects. -% -% INPUTS -% o A dates object with n or 1 elements. -% o B dates object with n or 1 elements. -% -% OUTPUTS -% o C column vector of max(n,1) elements (zeros or ones). - -% 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 ~isequal(nargin,2) - error('dates::ge: I need exactly two input arguments!') -end - -if ~isa(A,'dates') || ~isa(B,'dates') - error(['dates::ge: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be a dates objects!']) -end - -if ~isequal(A.freq,B.freq) - C = false; - return -end - -if isequal(A.ndat, B.ndat) - C = (A==B); - idx = find(C==0); - for i=1:length(idx) - C(idx(i)) = greaterorequal(A.time(idx(i),:), B.time(idx(i),:)); - end -else - if isequal(A.ndat,1) - C = false(B.ndat,1); - for i=1:B.ndat - C(i) = greaterorequal(A.time, B.time(i,:)); - end - elseif isequal(B.ndat,1) - C = false(A.ndat,1); - for i=1:A.ndat - C(i) = greaterorequal(A.time(i,:), B.time); - end - else - C = false; - end -end - - -function c = greaterorequal(a,b) - if a(1)>b(1) - c = true; - else - if a(1)=b(2) - c = true; - else - c = false; - end - end - end - - -%@test:1 -%$ % Define some dates -%$ date_2 = '1950Q2'; -%$ date_3 = '1950Q3'; -%$ date_4 = '1950Q1'; -%$ date_5 = '1949Q2'; -%$ -%$ % Call the tested routine. -%$ d2 = dates(date_2); -%$ d3 = dates(date_3); -%$ d4 = dates(date_4); -%$ d5 = dates(date_5); -%$ i1 = (d2>=d3); -%$ i2 = (d3>=d4); -%$ i3 = (d4>=d2); -%$ i4 = (d5>=d4); -%$ i5 = (d5>=d5); -%$ -%$ % Check the results. -%$ t(1) = dassert(i1,false); -%$ t(2) = dassert(i2,true); -%$ t(3) = dassert(i3,false); -%$ t(4) = dassert(i4,false); -%$ t(5) = dassert(i5,true); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates -%$ B1 = '1945Q1'; -%$ B2 = '1945Q2'; -%$ B3 = '1945Q3'; -%$ B4 = '1945Q4'; -%$ B5 = '1950Q1'; -%$ -%$ % Create dates objects. -%$ dd = dates(B1,B2,B3,B4); -%$ -%$ % Check the results. -%$ t(1) = dassert(dates(B1)>=dates(B2),false); -%$ t(2) = dassert(dates(B2)>=dates(B1),true); -%$ t(3) = dassert(dates(B2)>=dates(B2),true); -%$ t(4) = dassert(dd>=dates(B5),false(4,1)); -%$ t(5) = dassert(dates(B5)>=dd,true(4,1)); -%$ t(6) = dassert(dates(B1)>=dd,[true; false(3,1)]); -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/gt.m b/matlab/@dates/gt.m deleted file mode 100644 index fbf36fbf3..000000000 --- a/matlab/@dates/gt.m +++ /dev/null @@ -1,123 +0,0 @@ -function C = gt(A,B) % --*-- Unitary tests --*-- - -% Overloads the > operator for dates objects. -% -% INPUTS -% o A dates object with n or 1 elements. -% o B dates object with n or 1 elements. -% -% OUTPUTS -% o C column vector of max(n,1) elements (zeros or ones). - -% 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 ~isequal(nargin,2) - error('dates::gt: I need exactly two input arguments!') -end - -if ~isa(A,'dates') || ~isa(B,'dates') - error(['dates::gt: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be a dates objects!']) -end - -if ~isequal(A.freq,B.freq) - C = false; - return -end - -if isequal(A.ndat, B.ndat) - C = false(A.ndat,1); - for i=1:A.ndat - C(i) = greaterthan(A.time(i,:), B.time(i,:)); - end -else - if isequal(A.ndat,1) - C = false(B.ndat,1); - for i=1:B.ndat - C(i) = greaterthan(A.time, B.time(i,:)); - end - elseif isequal(B.ndat,1) - C = false(A.ndat,1); - for i=1:A.ndat - C(i) = greaterthan(A.time(i,:), B.time); - end - else - C = false; - end -end - - -function c = greaterthan(a,b) - if a(1)>b(1) - c = true; - else - if a(1)b(2) - c = true; - else - c = false; - end - end - end - -%@test:1 -%$ % Define some dates -%$ date_2 = '1950Q2'; -%$ date_3 = '1950Q3'; -%$ date_4 = '1950Q1'; -%$ date_5 = '1949Q2'; -%$ -%$ % Call the tested routine. -%$ d2 = dates(date_2); -%$ d3 = dates(date_3); -%$ d4 = dates(date_4); -%$ d5 = dates(date_5); -%$ i1 = (d2>d3); -%$ i2 = (d3>d4); -%$ i3 = (d4>d2); -%$ i4 = (d5>d4); -%$ -%$ % Check the results. -%$ t(1) = dassert(i1,false); -%$ t(2) = dassert(i2,true); -%$ t(3) = dassert(i3,false); -%$ t(4) = dassert(i4,false); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates -%$ B1 = '1945Q1'; -%$ B2 = '1945Q2'; -%$ B3 = '1945Q3'; -%$ B4 = '1945Q4'; -%$ B5 = '1950Q1'; -%$ -%$ % Create dates objects. -%$ dd = dates(B1,B2,B3,B4); -%$ -%$ % Check the results. -%$ t(1) = dassert(dates(B1)>dates(B2),false); -%$ t(2) = dassert(dates(B2)>dates(B1),true); -%$ t(3) = dassert(dates(B5)>dates(B1),true); -%$ t(4) = dassert(dd>dates(B5),false(4,1)); -%$ t(5) = dassert(dates(B5)>dd,true(4,1)); -%$ t(6) = dassert(dates(B1)>dd,false(4,1)); -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/horzcat.m b/matlab/@dates/horzcat.m deleted file mode 100644 index c74863728..000000000 --- a/matlab/@dates/horzcat.m +++ /dev/null @@ -1,152 +0,0 @@ -function B = horzcat(varargin) % --*-- Unitary tests --*-- - -% Overloads the horzcat method for dates objects. -% -% INPUTS -% o A1 dates object. -% o A2 dates object. -% o ... -% -% OUTPUTS -% o B dates object containing dates defined in A1, A2, ... -% -% EXAMPLE 1 -% If A, B and C are dates objects the following syntax: -% -% D = [A, B, C] ; -% -% Defines a dates object D containing the dates appearing in A, B and C. - -% 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 ~all(cellfun(@isdates,varargin)) - error('dates::horzcat: All input arguments must be dates objects.') -end - -n = nargin; -B = varargin{1}; - -if isequal(n,1), return, end - -for i=2:n - C = varargin{i}; - if isequal(B.freq,C.freq) - if ~isempty(C) - B.ndat = B.ndat + C.ndat; - B.time = [B.time; C.time]; - end - else - error('dates::horzcat: All input arguments must have the same frequency!') - end -end - -%@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, dates(B5)]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(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); -%$ d = [d, dates(B1), dates(B5)]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % 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); -%$ d = [d, dates(B1,B5)]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ % 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); -%$ d = [d, [dates(B1), dates(B5)]]; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:4 \ No newline at end of file diff --git a/matlab/@dates/intersect.m b/matlab/@dates/intersect.m deleted file mode 100644 index 95b8474a6..000000000 --- a/matlab/@dates/intersect.m +++ /dev/null @@ -1,88 +0,0 @@ -function C = intersect(A,B) % --*-- Unitary tests --*-- - -%@info: -%! @deftypefn {Function File} {@var{C} =} intersect (@var{A},@var{B}) -%! @anchor{@dates/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{dates} object. -%! @item B -%! @ref{dates} object. -%! @end table -%! @sp 2 -%! @strong{Outputs} -%! @sp 1 -%! @table @ @var -%! @item C -%! @ref{dates} 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,'dates') || ~isa(B,'dates') - error(['dates::plus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must be dates objects!']) -end - -if eq(A,B) - C = A; - return -end - -if ~isequal(A.freq,B.freq) - C = dates(); - return -end - -if isoctave || matlab_ver_less_than('8.1.0') - time = intersect(A.time,B.time,'rows'); -else - time = intersect(A.time,B.time,'rows','legacy'); -end - -C = dates(); -if isempty(time) - return -end - -C.freq = A.freq; -C.time = time; -C.ndat = rows(time); - -%@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1'):dates('1969Q4') ; -%$ d2 = dates('1960Q1'):dates('1969Q4') ; -%$ d3 = dates('1970Q1'):dates('1979Q4') ; -%$ -%$ % Call the tested routine. -%$ c1 = intersect(d1,d2); -%$ c2 = intersect(d1,d3); -%$ -%$ % Check the results. -%$ t(1) = dassert(c1,d2); -%$ t(2) = dassert(isempty(c2),true); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/@dates/isempty.m b/matlab/@dates/isempty.m deleted file mode 100644 index 859f7a785..000000000 --- a/matlab/@dates/isempty.m +++ /dev/null @@ -1,50 +0,0 @@ -function B = isempty(A) % --*-- Unitary tests --*-- - -%@info: -%! @deftypefn {Function File} {@var{B} =} isempty (@var{A}) -%! @anchor{@dates/isempty} -%! @sp 1 -%! Overloads the isempty function for the @ref{dates} class. -%! @sp 2 -%! @strong{Inputs} -%! @sp 1 -%! @table @ @var -%! @item A -%! @ref{dates} 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 = isequal(A.ndat,0); - -%@test:1 -%$ % Instantiate an empty dates object -%$ d = dates(); -%$ % 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/@dates/isequal.m b/matlab/@dates/isequal.m deleted file mode 100644 index 83ebd6508..000000000 --- a/matlab/@dates/isequal.m +++ /dev/null @@ -1,36 +0,0 @@ -function C = isequal(A, B, fake) - -% Overloads isequal function for dates objects. - -% 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,'dates') || ~isa(B,'dates') - error('dates::isequal: Both inputs must be dates 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); \ No newline at end of file diff --git a/matlab/@dates/le.m b/matlab/@dates/le.m deleted file mode 100644 index 031f42459..000000000 --- a/matlab/@dates/le.m +++ /dev/null @@ -1,127 +0,0 @@ -function C = le(A,B) % --*-- Unitary tests --*-- - -% Overloads the <= operator for dates objects. -% -% INPUTS -% o A dates object with n or 1 elements. -% o B dates object with n or 1 elements. -% -% OUTPUTS -% o C column vector of max(n,1) elements (zeros or ones). - -% 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 ~isequal(nargin,2) - error('dates::le: I need exactly two input arguments!') -end - -if ~isa(A,'dates') || ~isa(B,'dates') - error(['dates::le: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be a dates objects!']) -end - -if ~isequal(A.freq,B.freq) - C = false; - return -end - -if isequal(A.ndat, B.ndat) - C = (A==B); - idx = find(C==0); - for i=1:length(idx) - C(idx(i)) = lessorequal(A.time(idx(i),:), B.time(idx(i),:)); - end -else - if isequal(A.ndat,1) - C = false(B.ndat,1); - for i=1:B.ndat - C(i) = lessorequal(A.time, B.time(i,:)); - end - elseif isequal(B.ndat,1) - C = false(A.ndat,1); - for i=1:A.ndat - C(i) = lessorequal(A.time(i,:), B.time); - end - else - C = false; - end -end - - -function c = lessorequal(a, b) - if a(1)b(1) - c = false; - else - if a(2)<=b(2) - c = true; - else - c = false; - end - end - end - - -%@test:1 -%$ % Define some dates -%$ date_2 = '1950Q2'; -%$ date_3 = '1950Q3'; -%$ date_4 = '1950Q1'; -%$ date_5 = '1949Q2'; -%$ -%$ % Call the tested routine. -%$ d2 = dates(date_2); -%$ d3 = dates(date_3); -%$ d4 = dates(date_4); -%$ d5 = dates(date_5); -%$ i1 = (d2<=d3); -%$ i2 = (d3<=d4); -%$ i3 = (d4<=d2); -%$ i4 = (d5<=d4); -%$ i5 = (d5<=d5); -%$ -%$ % Check the results. -%$ t(1) = dassert(i1,true); -%$ t(2) = dassert(i2,false); -%$ t(3) = dassert(i3,true); -%$ t(4) = dassert(i4,true); -%$ t(5) = dassert(i5,true); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates -%$ B1 = '1945Q1'; -%$ B2 = '1945Q2'; -%$ B3 = '1945Q3'; -%$ B4 = '1945Q4'; -%$ B5 = '1950Q1'; -%$ -%$ % Create dates objects. -%$ dd = dates(B1,B2,B3,B4); -%$ -%$ % Check the results. -%$ t(1) = dassert(dates(B1)<=dates(B2),true); -%$ t(2) = dassert(dates(B2)<=dates(B1),false); -%$ t(3) = dassert(dates(B2)<=dates(B2),true); -%$ t(4) = dassert(dd<=dates(B5),true(4,1)); -%$ t(5) = dassert(dates(B5)<=dd,false(4,1)); -%$ t(6) = dassert(dates(B1)<=dd,true(4,1)); -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/length.m b/matlab/@dates/length.m deleted file mode 100644 index 26c24d13a..000000000 --- a/matlab/@dates/length.m +++ /dev/null @@ -1,22 +0,0 @@ -function n = length(A) - -% Returns the number of elements in a dates object. - -% 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 . - -n = A.ndat; \ No newline at end of file diff --git a/matlab/@dates/lt.m b/matlab/@dates/lt.m deleted file mode 100644 index 86097a6f5..000000000 --- a/matlab/@dates/lt.m +++ /dev/null @@ -1,122 +0,0 @@ -function C = lt(A,B) % --*-- Unitary tests --*-- - -% Overloads the < operator for dates objects. -% -% INPUTS -% o A dates object with n or 1 elements. -% o B dates object with n or 1 elements. -% -% OUTPUTS -% o C column vector of max(n,1) elements (zeros or ones). - -% 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 ~isequal(nargin,2) - error('dates::lt: I need exactly two input arguments!') -end - -if ~isa(A,'dates') || ~isa(B,'dates') - error(['dates::lt: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be a dates objects!']) -end - -if ~isequal(A.freq,B.freq) - C = false; - return -end - -if isequal(A.ndat, B.ndat) - C = false(A.ndat,1); - for i=1:A.ndat - C(i) = lessthan(A.time(i,:),B.time(i,:)); - end -else - if isequal(A.ndat,1) - C = false(B.ndat,1); - for i=1:B.ndat - C(i) = lessthan(A.time,B.time(i,:)); - end - elseif isequal(B.ndat,1) - C = false(A.ndat,1); - for i=1:A.ndat - C(i) = lessthan(A.time(i,:),B.time); - end - else - C = false; - end -end - -function c = lessthan(a,b) - if a(1)b(1) - c = false; - else - if a(2). - -switch nargin - case 1 - switch length(varargin{1}) - case 0 - C= dates(); - case 1 - C = varargin{1}; - otherwise - tmp = sortrows(varargin{1}.time); - C = dates(); - C.freq = varargin{1}.freq; - C.ndat = 1; - C.time = tmp(varargin{1}.ndat,:); - end - otherwise - C = max(horzcat(varargin{:})); -end - -%@test:1 -%$ % Define some dates -%$ d3 = dates('1950q2'); -%$ d4 = dates('1950Q3'); -%$ d5 = dates('1950m1'); -%$ d6 = dates('1948M6'); -%$ m2 = max(d3,d4); -%$ i2 = (m2==d4); -%$ m3 = max(d5,d6); -%$ i3 = (m3==d5); -%$ -%$ % Check the results. -%$ t(1) = dassert(i2,1); -%$ t(2) = dassert(i3,1); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates -%$ d = dates('1950Q2','1951Q3','1949Q1','1950Q4'); -%$ m = max(d); -%$ i = (m==dates('1951Q3')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i,1); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define some dates -%$ m = max(dates('1950Q2','1951Q3'),dates('1949Q1'),dates('1950Q4')); -%$ i = (m==dates('1951Q3')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i,1); -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ % Define some dates -%$ m = max(dates('1950Q2'),dates('1951Q3'),dates('1949Q1'),dates('1950Q4')); -%$ i = (m==dates('1951Q3')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i,1); -%$ T = all(t); -%@eof:4 \ No newline at end of file diff --git a/matlab/@dates/min.m b/matlab/@dates/min.m deleted file mode 100644 index 5a2bd9d63..000000000 --- a/matlab/@dates/min.m +++ /dev/null @@ -1,86 +0,0 @@ -function C = min(varargin) - -% Overloads the min function for dates objects. - -% 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 . - -switch nargin - case 1 - switch length(varargin{1}) - case 0 - C= dates(); - case 1 - C = varargin{1}; - otherwise - tmp = sortrows(varargin{1}.time); - C = dates(); - C.freq = varargin{1}.freq; - C.ndat = 1; - C.time = tmp(1,:); - end - otherwise - C = min(horzcat(varargin{:})); -end - -%@test:1 -%$ % Define some dates -%$ d3 = dates('1950q2'); -%$ d4 = dates('1950Q3'); -%$ d5 = dates('1950m1'); -%$ d6 = dates('1948M6'); -%$ m2 = min(d3,d4); -%$ i2 = (m2==d3); -%$ m3 = min(d5,d6); -%$ i3 = (m3==d6); -%$ -%$ % Check the results. -%$ t(1) = dassert(i2,1); -%$ t(2) = dassert(i3,1); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates -%$ d = dates('1950Q2','1951Q3','1949Q1','1950Q4'); -%$ m = min(d); -%$ i = (m==dates('1949Q1')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i,1); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define some dates -%$ m = min(dates('1950Q2','1951Q3'),dates('1949Q1'),dates('1950Q4')); -%$ i = (m==dates('1949Q1')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i,1); -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ % Define some dates -%$ m = min(dates('1950Q2'),dates('1951Q3'),dates('1949Q1'),dates('1950Q4')); -%$ i = (m==dates('1949Q1')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i,1); -%$ T = all(t); -%@eof:4 \ No newline at end of file diff --git a/matlab/@dates/minus.m b/matlab/@dates/minus.m deleted file mode 100644 index 455efc0ad..000000000 --- a/matlab/@dates/minus.m +++ /dev/null @@ -1,154 +0,0 @@ -function C = minus(A,B) % --*-- Unitary tests --*-- - -% Overloads the minus operator (-). If A and B are dates objects, the method returns the number of periods between A and B (so that A+C=B). If -% one of the inputs is an integer or a vector of integers, the method shifts the dates object by X (the interger input) periods backward. - -% 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(B,'dates') - if ~isequal(A.freq,B.freq) - error(['dates::minus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must have common frequencies!']) - end - if isempty(A) || isempty(B) - error(['dates::minus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must not be empty!']) - end - if ~isequal(length(A),length(B)) - if length(A)==1 - A.time = repmat(A.time,B.ndat,1); - A.ndat = B.ndat; - elseif length(B)==1 - B.time = repmat(B.time,A.ndat,1); - B.ndat = A.ndat; - else - error(['dates::minus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' lengths are not consistent!']) - end - end - C = zeros(length(A),1); - id = find(~(A==B)); - if isempty(id) - return - end - C(id) = A.time(id,2)-B.time(id,2) + (A.time(id,1)-B.time(id,1))*A.freq; -elseif (isvector(B) && isequal(length(B),A.ndat) && all(isint(B))) || isscalar(B) && isint(B) || isequal(length(A),1) && isvector(B) && all(isint(B)) - C = dates(); - C.freq = A.freq; - C.time = add_periods_to_array_of_dates(A.time, A.freq, -B); - C.ndat = rows(C.time); -else - error('dates::plus: I don''t understand what you want to do! Check the manual.') -end - -%@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1960Q1'); -%$ d2 = dates('1950Q3','1950Q4','1960Q1'); -%$ d3 = dates('2000Q1'); -%$ d4 = dates('2002Q2'); -%$ % Call the tested routine. -%$ try -%$ e1 = d2-d1; -%$ e2 = d4-d3; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,[2; 2; 0]); -%$ t(3) = dassert(e2,9); -%$ end -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates objects -%$ d1 = dates('1950Y','1951Y','1953Y'); -%$ d2 = dates('1951Y','1952Y','1953Y'); -%$ d3 = dates('2000Y'); -%$ d4 = dates('1999Y'); -%$ % Call the tested routine. -%$ try -%$ e1 = d2-d1; -%$ e2 = d4-d3; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,[1; 1; 0]); -%$ t(3) = dassert(e2,-1); -%$ end -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define some dates objects -%$ d1 = dates('2000Y'); -%$ d2 = dates('1999Y'); -%$ % Call the tested routine. -%$ try -%$ e1 = d1-1; -%$ e2 = d2-(-1); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,d2); -%$ t(3) = dassert(e2,d1); -%$ end -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ % Define some dates objects -%$ d1 = dates('2000Q1'); -%$ e1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4'); -%$ % Call the tested routine. -%$ try -%$ f1 = d1-transpose(1:5); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ end -%$ T = all(t); -%@eof:4 - -%@test:5 -%$ % Define some dates objects -%$ d1 = dates('1999Q4','1999Q3','1999Q2','1999Q1','1998Q4'); -%$ e1 = dates('2000Q1')*5; -%$ % Call the tested routine. -%$ try -%$ f1 = d1-(-transpose(1:5)); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ end -%$ T = all(t); -%@eof:5 \ No newline at end of file diff --git a/matlab/@dates/mtimes.m b/matlab/@dates/mtimes.m deleted file mode 100644 index 513915b32..000000000 --- a/matlab/@dates/mtimes.m +++ /dev/null @@ -1,39 +0,0 @@ -function B = mtimes(A,n) - -% Overloads the times operator (*). Returns dates object A replicated n times. -% -% INPUTS -% o A dates object with m elements. -% -% OUTPUTS -% o B dates object with m*n elements. -% -% EXAMPLE 1 -% If A = dates('2000Q1'), then B=A*3 is a dates object equal to dates('2000Q1','2000Q1','2000Q1') -% -% EXAMPLE 2 -% If A = dates('2003Q1','2009Q2'), then B=A*2 is a dates object equal to dates('2003Q1','2009Q2','2003Q1','2009Q2') - -% 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 ~(isscalar(n) && isint(n)) - error('dates::m: First and second input arguments have to be a dates object and a scalar integer!') -end -B = A; -B.time = repmat(A.time,n,1); -B.ndat = A.ndat*n; \ No newline at end of file diff --git a/matlab/@dates/ne.m b/matlab/@dates/ne.m deleted file mode 100644 index 0fdf4f8c9..000000000 --- a/matlab/@dates/ne.m +++ /dev/null @@ -1,102 +0,0 @@ -function C = ne(A,B) % --*-- Unitary tests --*-- - -% Overloads ~= operator for dates objects. -% -% INPUTS -% o A dates object with n or 1 elements. -% o B dates object with n or 1 elements. -% -% OUTPUTS -% o C column vector of max(n,1) elements (zeros or ones). - -% 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 ~isequal(nargin,2) - error('dates::ne: I need exactly two input arguments!') -end - -if ~isdates(A) || ~isdates(B) - error(['dates::ne: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' have to be dates objects!']) -end - -if ~isequal(A.freq,B.freq) - C = false; - return -end - -if isequal(A.ndat, B.ndat) - C = logical(transpose(any(transpose(ne(A.time,B.time))))); -else - if isequal(A.ndat,1) || isequal(B.ndat,1) - C = logical(transpose(any(transpose(bsxfun(@ne,A.time,B.time))))); - else - C = false; - end -end - -%@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ d2 = dates('1960Q1','1960Q2','1960Q3','1960Q4') ; -%$ d3 = dates('1950Q1','1960Q2','1950Q3','1960Q4') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1~=d1; -%$ t2 = d1~=d2; -%$ t3 = d1~=d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,false(4,1)); -%$ t(2) = dassert(t2,true(4,1)); -%$ t(3) = dassert(t3,[false; true; false; true]); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates objects -%$ d1 = dates('1950Q1') ; -%$ d2 = dates('1960Q1') ; -%$ d3 = dates('1960Q1') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1~=d1; -%$ t2 = d1~=d2; -%$ t3 = d1~=d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,false); -%$ t(2) = dassert(t2,true); -%$ t(3) = dassert(t3,true); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ d2 = dates('1950Q2') ; -%$ d3 = dates('1970Q1') ; -%$ -%$ % Call the tested routine. -%$ t1 = d1~=d2; -%$ t2 = d1~=d3; -%$ -%$ % Check the results. -%$ t(1) = dassert(t1,[true; false; true; true]); -%$ t(2) = dassert(t2,true(4,1)); -%$ T = all(t); -%@eof:3 diff --git a/matlab/@dates/plus.m b/matlab/@dates/plus.m deleted file mode 100644 index b65fc3c0e..000000000 --- a/matlab/@dates/plus.m +++ /dev/null @@ -1,132 +0,0 @@ -function C = plus(A,B) % --*-- Unitary tests --*-- - -% Overloads the plus operator. If A and B are dates objects the method combines A and B without removing repetitions. If -% one of the inputs is an integer or a vector of integers, the method shifts the dates object by X (the interger input) -% periods forward. - -% 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(B,'dates') - % Concatenate dates objects without removing repetitions if A and B are not disjoint sets of dates. - if ~isequal(A.freq,B.freq) && A.ndat>0 && B.ndat>0 - error(['dates::plus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must have common frequencies!']) - end - if isempty(B) - C = A; - return - end - if isempty(A) - C = B; - return - end - C = dates(); - C.freq = A.freq; - C.time = [A.time; B.time]; - C.ndat = A.ndat+B.ndat; -elseif (isvector(B) && isequal(length(B),A.ndat) && all(isint(B))) || isscalar(B) && isint(B) || isequal(length(A),1) && isvector(B) && all(isint(B)) - C = dates(); - C.freq = A.freq; - C.time = add_periods_to_array_of_dates(A.time, A.freq, B); - C.ndat = rows(C.time); -else - error('dates::plus: I don''t understand what you want to do! Check the manual.') -end - -%@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1','1950Q2') ; -%$ d2 = dates('1950Q3','1950Q4') ; -%$ d3 = dates('1950Q1','1950Q2','1950Q3','1950Q4') ; -%$ -%$ % Call the tested routine. -%$ try -%$ e1 = d1+d2; -%$ e2 = d1+d2+d3; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,d3); -%$ t(3) = dassert(e2,dates('1950Q1','1950Q2','1950Q3','1950Q4','1950Q1','1950Q2','1950Q3','1950Q4')); -%$ end -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates objects -%$ d1 = dates('1950Q1'); -%$ e1 = dates('1950Q2'); -%$ e2 = dates('1950Q3'); -%$ e3 = dates('1950Q4'); -%$ e4 = dates('1951Q1'); -%$ e5 = dates('1950Q2','1950Q3','1950Q4','1951Q1'); -%$ -%$ % Call the tested routine. -%$ try -%$ f1 = d1+1; -%$ f2 = d1+2; -%$ f3 = d1+3; -%$ f4 = d1+4; -%$ f5 = d1+transpose(1:4); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ t(3) = dassert(e2,f2); -%$ t(4) = dassert(e3,f3); -%$ t(5) = dassert(e4,f4); -%$ t(6) = dassert(e5,f5); -%$ end -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define some dates objects -%$ d1 = dates('1950Q1'); -%$ e1 = dates('1949Q4'); -%$ e2 = dates('1949Q3'); -%$ e3 = dates('1949Q2'); -%$ e4 = dates('1949Q1'); -%$ e5 = dates('1948Q4'); -%$ -%$ % Call the tested routine. -%$ try -%$ f1 = d1+(-1); -%$ f2 = d1+(-2); -%$ f3 = d1+(-3); -%$ f4 = d1+(-4); -%$ f5 = d1+(-5); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(e1,f1); -%$ t(3) = dassert(e2,f2); -%$ t(4) = dassert(e3,f3); -%$ t(5) = dassert(e4,f4); -%$ t(6) = dassert(e5,f5); -%$ end -%$ T = all(t); -%@eof:3 \ No newline at end of file diff --git a/matlab/@dates/pop.m b/matlab/@dates/pop.m deleted file mode 100644 index 93b64a1a9..000000000 --- a/matlab/@dates/pop.m +++ /dev/null @@ -1,119 +0,0 @@ -function B = pop(A,a) % --*-- Unitary tests --*-- - -% pop method for dates class (removes a date). -% -% INPUTS -% o A dates object. -% o a dates object with one element, string which can be interpreted as a date or integer scalar. -% -% OUTPUTS -% o B dates object (with B.ndat==A.ndat-1). -% -% REMARKS -% If a is a date appearing more than once in A, then only the last occurence is removed. If one wants to -% remove all the occurences of a in A, the setdiff function should be used instead. - -% 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 . - -if nargin<2 - % Remove last date - B = dates(); - B.ndat = A.ndat-1; - B.freq = A.freq; - B.time = NaN(B.ndat,2); - B.time = A.time(1:end-1,:); - return -end - -if ~( isdates(a) || isdate(a) || (isscalar(a) && isint(a)) ) - error(['dates::pop: Input argument ' inputname(2) ' has to be a dates object with a single element, a string (which can be interpreted as a date) or an integer.']) -end - -if ischar(a) - a = dates(a); -end - -B = dates(); -B.ndat = A.ndat-1; -B.freq = A.freq; -B.time = NaN(B.ndat,2); - -if isscalar(a) && isint(a) - idx = find(transpose(1:A.ndat)~=a); - B.time = A.time(idx,:); -else - if ~isequal(A.freq,a.freq) - error('dates::pop: Inputs must have common frequency!') - end - idx = find(A==a); - jdx = find(transpose(1:A.ndat)~=idx(end)); - B.time = A.time(jdx,:); -end - -%@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)); -%$ f = d.pop(); -%$ t(1) = dassert(f.time,e.time(1:end-1,:)); -%$ t(2) = dassert(f.freq,e.freq); -%$ t(3) = dassert(f.ndat,e.ndat-1); -%$ f = d.pop(B1); -%$ t(4) = dassert(f.time,[1945 3; 1950 1; 1950 2; 2009 2]); -%$ t(5) = dassert(f.freq,e.freq); -%$ t(6) = dassert(f.ndat,e.ndat-1); -%$ f = d.pop(dates(B1)); -%$ t(7) = dassert(f.time,[1945 3; 1950 1; 1950 2; 2009 2]); -%$ t(8) = dassert(f.freq,e.freq); -%$ t(9) = dassert(f.ndat,e.ndat-1); -%$ -%$ % Check the results. -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define some dates -%$ B1 = '1950Q1'; -%$ B2 = '1950Q2'; -%$ B3 = '1950Q1'; -%$ B4 = '1945Q3'; -%$ B5 = '2009Q2'; -%$ -%$ % Call the tested routine -%$ d = dates(B1,B2,B3,B4); -%$ d = d.append(dates(B5)); -%$ f = d.pop(); -%$ t(1) = dassert(f,dates(B1,B2,B3,B4)); -%$ f = d.pop(B1); -%$ t(2) = dassert(f,dates(B1,B2,B4,B5)); -%$ g = f.pop(1); -%$ t(3) = dassert(g,dates(B2,B4,B5)); -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/setdiff.m b/matlab/@dates/setdiff.m deleted file mode 100644 index 56b020a71..000000000 --- a/matlab/@dates/setdiff.m +++ /dev/null @@ -1,88 +0,0 @@ -function C = setdiff(A,B) % --*-- Unitary tests --*-- - -%@info: -%! @deftypefn {Function File} {@var{C} =} setdiff (@var{A},@var{B}) -%! @anchor{@dates/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{dates} object. -%! @item B -%! @ref{dates} object. -%! @end table -%! @sp 2 -%! @strong{Outputs} -%! @sp 1 -%! @table @ @var -%! @item C -%! @ref{dates} 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,'dates') || ~isa(B,'dates') - error(['dates::plus: Input arguments ''' inputname(1) ''' and ''' inputname(2) ''' must be dates objects!']) -end - -if eq(A,B) - C = A; - return -end - -if ~isequal(A.freq,B.freq) - C = dates(); - return -end - -if isoctave || matlab_ver_less_than('8.1.0') - time = setdiff(A.time,B.time,'rows'); -else - time = setdiff(A.time,B.time,'rows','legacy'); -end - -C = dates(); -if isempty(time) - return -end - -C.freq = A.freq; -C.time = time; -C.ndat = rows(time); - -%@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1'):dates('1969Q4') ; -%$ d2 = dates('1960Q1'):dates('1969Q4') ; -%$ d3 = dates('1970Q1'):dates('1979Q4') ; -%$ -%$ % Call the tested routine. -%$ c1 = intersect(d1,d2); -%$ c2 = intersect(d1,d3); -%$ -%$ % Check the results. -%$ t(1) = dassert(c1,d2); -%$ t(2) = dassert(isempty(c2),logical(1)); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/@dates/size.m b/matlab/@dates/size.m deleted file mode 100644 index 02df26070..000000000 --- a/matlab/@dates/size.m +++ /dev/null @@ -1,35 +0,0 @@ -function varargout = size(o) - -% Copyright (C) 2013 -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 . - -switch nargout - case 0 - if isempty(o) - size([]) - else - size(o.time) - end - case 1 - if isempty(o) - varargout{1} = size([]); - else - varargout{1} = size(o.time); - end - otherwise - error('dates::size: Wrong calling sequence! Cannot return more than one argument.') -end \ No newline at end of file diff --git a/matlab/@dates/sort.m b/matlab/@dates/sort.m deleted file mode 100644 index 0cb3c17d5..000000000 --- a/matlab/@dates/sort.m +++ /dev/null @@ -1,78 +0,0 @@ -function dd = sort(dd) % --*-- Unitary tests --*-- - -% Sort method for dates class. -% -% INPUTS -% o dd dates object. -% -% OUTPUTS -% o dd dates object (with dates sorted by increasing order). - -% Copyright (C) 2011-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 isequal(dd.ndat,1) - return -end - -dd.time = sortrows(dd.time,[1,2]); - -%@test:1 -%$ % Define some dates -%$ B1 = '1953Q4'; -%$ B2 = '1950Q2'; -%$ B3 = '1950Q1'; -%$ B4 = '1945Q3'; -%$ -%$ % Define expected results. -%$ e.time = [1945 3; 1950 1; 1950 2; 1953 4]; -%$ e.freq = 4; -%$ e.ndat = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B1,B2,B3,B4); -%$ d = d.sort; -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:1 - -%@test:1 -%$ % Define some dates -%$ B1 = '1953Q4'; -%$ B2 = '1950Q2'; -%$ B3 = '1950Q1'; -%$ B4 = '1945Q3'; -%$ -%$ % Define expected results. -%$ e.time = [1945 3; 1950 1; 1950 2; 1953 4]; -%$ e.freq = 4; -%$ e.ndat = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B1,B2,B3,B4); -%$ d = d.sort(); -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/@dates/strings.m b/matlab/@dates/strings.m deleted file mode 100644 index 94ccefa11..000000000 --- a/matlab/@dates/strings.m +++ /dev/null @@ -1,35 +0,0 @@ -function m = strings(dd) - -% Returns a cell array of strings containing the dates -% -% INPUTS -% o dd dates object -% -% OUTPUTS -% o m cell array of strings -% -% 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 . - -m = cell(1,dd.ndat); - -for i = 1:dd.ndat - m(i) = { date2string(dd.time(i,:), dd.freq) }; -end \ No newline at end of file diff --git a/matlab/@dates/subsasgn.m b/matlab/@dates/subsasgn.m deleted file mode 100644 index 4b9100704..000000000 --- a/matlab/@dates/subsasgn.m +++ /dev/null @@ -1,20 +0,0 @@ -function val = subsasgn(val, idx, rhs) - -% 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 . - -error('dates::subsasgn: Members of dates class are private') \ No newline at end of file diff --git a/matlab/@dates/subsref.m b/matlab/@dates/subsref.m deleted file mode 100644 index 66de24798..000000000 --- a/matlab/@dates/subsref.m +++ /dev/null @@ -1,333 +0,0 @@ -function B = subsref(A,S) % --*-- Unitary tests --*-- - -% Overload the subsref method for dates objects. -% -% INPUTS -% o A dates object. -% o S matlab's structure. -% -% OUTPUTS -% o B dates object. -% -% REMARKS -% See the matlab's documentation about the subsref method. - -% 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 . - -switch S(1).type - case '.' - switch S(1).subs - case {'time','freq','ndat'}% Access public members. - if length(S)>1 && isequal(S(2).type,'()') && isempty(S(2).subs) - error(['dates::subsref: ' S(1).subs ' is not a method but a member!']) - end - B = builtin('subsref', A, S(1)); - case {'sort','unique','double','isempty','length','char'}% Public methods (without input arguments) - B = feval(S(1).subs,A); - if length(S)>1 && isequal(S(2).type,'()') && isempty(S(2).subs) - S = shiftS(S,1); - end - case {'append','pop'}% Public methods (with arguments). - if isequal(S(2).type,'()') - B = feval(S(1).subs,A,S(2).subs{:}); - S = shiftS(S,1); - else - error('dates::subsref: Something is wrong in your syntax!') - end - case {'disp'} - feval(S(1).subs,A); - return - otherwise - error('dates::subsref: Unknown public member or method!') - end - case '()' - if isempty(A) - if isempty(A.freq) - % Populate an empty dates object with time member (freq is not specified). Needs two or three inputs. First input is an integer - % scalar specifying the frequency. Second input is either the time member (a n*2 array of integers) or a column vector with n - % elements (the first column of the time member --> years). If the the second input is a row vector and if A.freq~=1 a third input - % is necessary. The third input is n*1 vector of integers between 1 and A.freq (second column of the time member --> subperiods). - B = dates(); - % First input is the frequency. - if isfreq(S(1).subs{1}) - if ischar(S(1).subs{1}) - B.freq = string2freq(S(1).subs{1}); - else - B.freq = S(1).subs{1}; - end - else - error('dates::subsref: First input must be a frequency!') - end - if isequal(length(S(1).subs),2) - % If two inputs are provided, the second input must be a n*2 array except if frequency is annual. - [n, m] = size(S(1).subs{2}); - if m>2 - error('dates::subsref: Second input argument array cannot have more than two columns!') - end - if ~isequal(m,2) && ~isequal(B.freq,1) - error('dates::subsref: Second argument has to be a n*2 array for non annual frequency!') - end - if ~all(all(S(1).subs{2})) - error('dates::subsref: Second argument has be an array of intergers!') - end - if m>1 && ~issubperiod(S(1).subs{2}(:,2),B.freq) - error(['dates::subsref: Elements in the second column of the first input argument are not legal subperiods (should be integers betwwen 1 and ' num2str(B.freq) ')!']) - end - if isequal(m,2) - B.time = S(1).subs{2}; - elseif isequal(m,1) - B.time = [S(1).subs{2}, ones(n,1)]; - else - error('dates::subsref: This is a bug!') - end - B.ndat = rows(B.time); - elseif isequal(length(S(1).subs),3) - % If three inputs are provided, the second and third inputs are column verctors of integers (years and subperiods). - if ~iscolumn(S(1).subs{2}) && ~all(isint(S(1).subs{2})) - error('dates::subsref: Second input argument must be a column vector of integers!') - end - n1 = size(S(1).subs{2},1); - if ~iscolumn(S(1).subs{3}) && ~issubperiod(S(1).subs{3}, B.freq) - error(['dates::subsref: Third input argument must be a column vector of subperiods (integers between 1 and ' num2str(B.freq) ')!']) - end - n2 = size(S(1).subs{3},1); - if ~isequal(n1,n2) - error('dates::subsref: Second and third input arguments must have the same number of elements!') - end - B.time = [S(1).subs{2}, S(1).subs{3}]; - B.ndat = rows(B.time); - else - error('dates::subsref: Wrong calling sequence!') - end - else - % Populate an empty dates object with time member (freq is already specified). - % Needs one (time) or two (first and second columns of time for years and subperiods) inputs. - B = A; - if isequal(length(S(1).subs),2) - if ~iscolumn(S(1).subs{1}) && ~all(isint(S(1).subs{1})) - error('dates::subsref: First argument has to be a column vector of integers!') - end - n1 = size(S(1).subs{1},1); - if ~iscolumn(S(1).subs{2}) && ~issubperiod(S(1).subs{2}, B.freq) - error(['dates::subsref: Second argument has to be a column vector of subperiods (integers between 1 and ' num2str(B.freq) ')!']) - end - n2 = size(S(1).subs{2},1); - if ~isequal(n2,n1) - error('dates::subsref: First and second argument must have the same number of rows!') - end - B.time = [S(1).subs{1}, S(1).subs{2}]; - B.ndat = rows(B.time); - elseif isequal(length(S(1).subs),1) - [n, m] = size(S(1).subs{1}); - if ~isequal(m,2) && ~isequal(B.freq,1) - error('dates::subsref: First argument has to be a n*2 array!') - end - if ~all(isint(S(1).subs{1}(:,1))) - error('dates::subsref: First column of the first argument has to be a column vector of integers!') - end - if m>1 && issubperiod(S(1).subs{1}(:,1), B.freq) - error(['dates::subsref: The second column of the first input argument has to be a column vector of subperiods (integers between 1 and ' num2str(B.freq) ')!']) - end - if isequal(m,2) - B.time = S(1).subs{1}; - elseif isequal(m,1) && isequal(B.freq,1) - B.time = [S(1).subs{1}, ones(n,1)]; - else - error('dates::subsref: This is a bug!') - end - B.ndat = rows(B.time); - else - error('dates::subsref: Wrong number of inputs!') - end - end - else - % dates object A is not empty. We extract some dates - if isvector(S(1).subs{1}) && all(isint(S(1).subs{1})) && all(S(1).subs{1}>0) && all(S(1).subs{1}<=A.ndat) - B = dates(); - B.freq = A.freq; - B.time = A.time(S(1).subs{1},:); - B.ndat = rows(B.time); - else - error(['dates::subsref: indices has to be a vector of positive integers less than or equal to ' int2str(A.ndat) '!']) - end - end - otherwise - error('dates::subsref: Something is wrong in your syntax!') -end - -S = shiftS(S,1); -if ~isempty(S) - B = subsref(B, S); -end - -%@test:1 -%$ % Define a dates object -%$ B = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); -%$ -%$ % Try to extract a sub-dates object. -%$ d = B(2:3); -%$ -%$ if isa(d,'dates') -%$ t(1) = 1; -%$ else -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2; 1950 3]); -%$ t(4) = dassert(d.ndat,2); -%$ end -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ % Define a dates object -%$ B = dates('1950Q1'):dates('1960Q3'); -%$ -%$ % Try to extract a sub-dates object and apply a method -%$ -%$ d = B(2:3).sort ; -%$ -%$ if isa(d,'dates') -%$ t(1) = 1; -%$ else -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2; 1950 3]); -%$ t(4) = dassert(d.ndat,2); -%$ end -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ % Define a dates object -%$ B = dates('1950Q1'):dates('1960Q3'); -%$ -%$ % Try to extract a sub-dates object and apply a method -%$ -%$ d = B(2:3).sort() ; -%$ -%$ if isa(d,'dates') -%$ t(1) = 1; -%$ else -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2; 1950 3]); -%$ t(4) = dassert(d.ndat,2); -%$ end -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ % Define a dates object -%$ B = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); -%$ -%$ % Try to extract a sub-dates object. -%$ d = B(2); -%$ -%$ if isa(d,'dates') -%$ t(1) = 1; -%$ else -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(d.freq,B.freq); -%$ t(3) = dassert(d.time,[1950 2]); -%$ t(4) = dassert(d.ndat,1); -%$ end -%$ T = all(t); -%@eof:4 - -%@test:5 -%$ % Define an empty dates object with quaterly frequency. -%$ qq = dates('Q'); -%$ -%$ % Define a ranges of dates using qq. -%$ try -%$ r1 = qq(1950,1):qq(1950,3);%qq([1950, 3]); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ if t(1) -%$ try -%$ r2 = qq([1950, 1; 1950, 2; 1950, 3]); -%$ t(2) = 1; -%$ catch -%$ t(2) = 0; -%$ end -%$ end -%$ if t(1) && t(2) -%$ try -%$ r3 = qq(1950*ones(3,1), transpose(1:3)); -%$ t(3) = 1; -%$ catch -%$ t(3) = 0; -%$ end -%$ end -%$ -%$ if t(1) && t(2) && t(3) -%$ t(4) = dassert(r1,r2); -%$ t(5) = dassert(r1,r3); -%$ end -%$ T = all(t); -%@eof:5 - -%@test:6 -%$ % Define an empty dates object with quaterly frequency. -%$ date = dates(); -%$ -%$ % Define a ranges of dates using qq. -%$ try -%$ r1 = date(4,1950,1):date(4,[1950, 3]); -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ if t(1) -%$ try -%$ r2 = date(4,[1950, 1; 1950, 2; 1950, 3]); -%$ t(2) = 1; -%$ catch -%$ t(2) = 0; -%$ end -%$ end -%$ if t(1) && t(2) -%$ try -%$ r3 = date(4,1950*ones(3,1), transpose(1:3)); -%$ t(3) = 1; -%$ catch -%$ t(3) = 0; -%$ end -%$ end -%$ -%$ if t(1) && t(2) && t(3) -%$ t(4) = dassert(r1,r2); -%$ t(5) = dassert(r1,r3); -%$ end -%$ T = all(t); -%@eof:6 - diff --git a/matlab/@dates/uminus.m b/matlab/@dates/uminus.m deleted file mode 100644 index 3785e11d9..000000000 --- a/matlab/@dates/uminus.m +++ /dev/null @@ -1,78 +0,0 @@ -function B = uminus(A) % --*-- Unitary tests --*-- - -% Overloads the unary minus operator for dates objects. Shifts all the elements by one period. -% -% INPUTS -% o A dates object with n elements. -% -% OUTPUTS -% o B dates object with n elements. - -% 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 = dates(A); -B.time(:,2) = B.time(:,2)-1; -idx = find(B.time(:,2)==0); -B.time(idx,1) = B.time(idx,1)-1; -B.time(idx,2) = B.freq; - -%@test:1 -%$ % Define some dates -%$ date_1 = '1950Y'; -%$ date_2 = '1950Q2'; -%$ date_3 = '1950Q1'; -%$ date_4 = '1950M2'; -%$ date_5 = '1950M1'; -%$ -%$ % Call the tested routine. -%$ d1 = dates(date_1); d1 = -d1; -%$ d2 = dates(date_2); d2 = -d2; -%$ d3 = dates(date_3); d3 = -d3; -%$ d4 = dates(date_4); d4 = -d4; -%$ d5 = dates(date_5); d5 = -d5; -%$ i1 = (d1==dates('1949Y')); -%$ i2 = (d2==dates('1950Q1')); -%$ i3 = (d3==dates('1949Q4')); -%$ i4 = (d4==dates('1950M1')); -%$ i5 = (d5==dates('1949M12')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i1,true); -%$ t(2) = dassert(i2,true); -%$ t(3) = dassert(i3,true); -%$ t(4) = dassert(i4,true); -%$ t(5) = dassert(i5,true); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); -%$ d2 = dates('1949Q4','1950Q1','1950Q2','1950Q3','1950Q4'); -%$ try -%$ d3 = -d1; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(all(d2==d3),true); -%$ end -%$ -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/union.m b/matlab/@dates/union.m deleted file mode 100644 index c1437d457..000000000 --- a/matlab/@dates/union.m +++ /dev/null @@ -1,58 +0,0 @@ -function D = union(varargin) % --*-- Unitary tests --*-- - -% Overloads union function for dates objects (removes repetitions if any). -% -% INPUTS -% o A dates object. -% o B dates object. -% o C dates object. -% o ... -% -% OUPUTS -% o D dates object (elements are sorted by increasing order). - -% 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 isequal(nargin,1) - D = sort(unique(varargin{1})); - return; -end - -D = sort(unique(horzcat(varargin{:}))); - -%@test:1 -%$ % Define some dates objects -%$ d1 = dates('1950Q1'):dates('1959Q4') ; -%$ d2 = dates('1960Q1'):dates('1969Q4') ; -%$ d3 = dates('1970Q1'):dates('1979Q4') ; -%$ -%$ % Call the tested routine. -%$ e1 = union(d1); -%$ e2 = union(d1,d2); -%$ e3 = union(d1,d2,d3); -%$ e4 = union(d1,d2,d3,d2+d3); -%$ e5 = union(d1,d2,d3,d2); -%$ -%$ % Check the results. -%$ t(1) = dassert(e1,d1); -%$ t(2) = dassert(e2,d1+d2); -%$ t(3) = dassert(e3,d1+d2+d3); -%$ t(4) = dassert(e4,d1+d2+d3); -%$ t(5) = dassert(e5,d1+d2+d3); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/@dates/unique.m b/matlab/@dates/unique.m deleted file mode 100644 index e655b511b..000000000 --- a/matlab/@dates/unique.m +++ /dev/null @@ -1,65 +0,0 @@ -function B = unique(A) % --*-- Unitary tests --*-- - -% Overloads the unique function for dates objects. -% -% INPUTS -% o A dates object. -% -% OUTPUTS -% o B dates object (a copy of A without repetitions, only the last occurence of a date is kept). - -% 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 . - -if isequal(A.ndat,1) - return -end - -B = A; - -if isoctave || matlab_ver_less_than('8.1.0') - [tmp, id, jd] = unique(A.time,'rows'); -else - [tmp, id, jd] = unique(A.time,'rows','legacy'); -end - -B.time = A.time(sort(id),:); -B.ndat = size(B.time,1); - -%@test:1 -%$ % Define some dates -%$ B1 = '1953Q4'; -%$ B2 = '1950Q2'; -%$ B3 = '1950q1'; -%$ B4 = '1945Q3'; -%$ B5 = '1950Q2'; -%$ -%$ % Define expected results. -%$ e.time = [1953 4; 1950 1; 1945 3; 1950 2]; -%$ e.freq = 4; -%$ e.ndat = 4; -%$ -%$ % Call the tested routine. -%$ d = dates(B1,B2,B3,B4,B5); -%$ d = d.unique(); -%$ -%$ % Check the results. -%$ t(1) = dassert(d.time,e.time); -%$ t(2) = dassert(d.freq,e.freq); -%$ t(3) = dassert(d.ndat,e.ndat); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/@dates/uplus.m b/matlab/@dates/uplus.m deleted file mode 100644 index 12aa0ff91..000000000 --- a/matlab/@dates/uplus.m +++ /dev/null @@ -1,78 +0,0 @@ -function B = uplus(A) % --*-- Unitary tests --*-- - -% Overloads the unary plus operator for dates objects. Shifts all the elements by one period. -% -% INPUTS -% o A dates object with n elements. -% -% OUTPUTS -% o B dates object with n elements. - -% 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 = dates(A); -B.time(:,2) = B.time(:,2)+1; -idx = find(B.time(:,2)>B.freq); % Happy new year! -B.time(idx,1) = B.time(idx,1)+1; -B.time(idx,2) = 1; - -%@test:1 -%$ % Define some dates -%$ date_1 = '1950Y'; -%$ date_2 = '1950Q2'; -%$ date_3 = '1950Q4'; -%$ date_4 = '1950M2'; -%$ date_5 = '1950M12'; -%$ -%$ % Call the tested routine. -%$ d1 = dates(date_1); d1 = +d1; -%$ d2 = dates(date_2); d2 = +d2; -%$ d3 = dates(date_3); d3 = +d3; -%$ d4 = dates(date_4); d4 = +d4; -%$ d5 = dates(date_5); d5 = +d5; -%$ i1 = (d1==dates('1951Y')); -%$ i2 = (d2==dates('1950Q3')); -%$ i3 = (d3==dates('1951Q1')); -%$ i4 = (d4==dates('1950M3')); -%$ i5 = (d5==dates('1951M1')); -%$ -%$ % Check the results. -%$ t(1) = dassert(i1,true); -%$ t(2) = dassert(i2,true); -%$ t(3) = dassert(i3,true); -%$ t(4) = dassert(i4,true); -%$ t(5) = dassert(i5,true); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ d1 = dates('1950Q1','1950Q2','1950Q3','1950Q4','1951Q1'); -%$ d2 = dates('1950Q2','1950Q3','1950Q4','1951Q1','1951Q2'); -%$ try -%$ d3 = +d1; -%$ t(1) = 1; -%$ catch -%$ t(1) = 0; -%$ end -%$ -%$ if t(1) -%$ t(2) = dassert(all(d2==d3),true); -%$ end -%$ -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/@dates/vertcat.m b/matlab/@dates/vertcat.m deleted file mode 100644 index 6cf21743d..000000000 --- a/matlab/@dates/vertcat.m +++ /dev/null @@ -1,37 +0,0 @@ -function B = vertcat(varargin) - -% Overloads the vertcat method for dates objects. -% -% INPUTS -% o A1 dates object. -% o A2 dates object. -% o ... -% -% OUTPUTS -% o B dates object containing dates defined in A1, A2, ... -% -% EXAMPLE 1 -% If A, B and C are dates object the following syntax: -% -% D = [A; B; C] ; -% -% Defines a dates object D containing the dates appearing in A, B and C. - -% 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 = horzcat(varargin{:}); \ No newline at end of file diff --git a/matlab/dynare_config.m b/matlab/dynare_config.m index 01c9ecb78..38a9f710f 100644 --- a/matlab/dynare_config.m +++ b/matlab/dynare_config.m @@ -58,9 +58,9 @@ addpath([dynareroot '/particle/']) addpath([dynareroot '/gsa/']) addpath([dynareroot '/ep/']) addpath([dynareroot '/lmmcp/']) +addpath([dynareroot '/modules/dates/src/']) addpath([dynareroot '/utilities/doc/']) addpath([dynareroot '/utilities/tests/src/']) -addpath([dynareroot '/utilities/dates/']) addpath([dynareroot '/utilities/dataset/']) addpath([dynareroot '/utilities/general/']) addpath([dynareroot '/utilities/dseries/']) diff --git a/matlab/modules/dates b/matlab/modules/dates new file mode 160000 index 000000000..6374a597d --- /dev/null +++ b/matlab/modules/dates @@ -0,0 +1 @@ +Subproject commit 6374a597d9cb4e24f2083229d58ba4e15642779d diff --git a/matlab/utilities/dates/add_periods_to_array_of_dates.m b/matlab/utilities/dates/add_periods_to_array_of_dates.m deleted file mode 100644 index cb3c4842d..000000000 --- a/matlab/utilities/dates/add_periods_to_array_of_dates.m +++ /dev/null @@ -1,83 +0,0 @@ -function time = add_periods_to_array_of_dates(time, freq, p) % --*-- Unitary tests --*-- - -% Adds a p periods (p can be negative) to a date (or a set of dates) characterized by array time and frequency freq. - -% 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 isequal(rows(time),1) && length(p)>1 - time = repmat(time,length(p),1); -end - -time(:,1) = time(:,1) + fix(p/freq); -time(:,2) = time(:,2) + rem(p,freq); - -id1 = find(time(:,2)>freq); -if ~isempty(id1) - time(id1,1) = time(id1,1) + 1; - time(id1,2) = time(id1,2) - freq; -end - -id2 = find(time(:,2)<1); -if ~isempty(id2) - time(id2,1) = time(id2,1) - 1; - time(id2,2) = time(id2,2) + freq; -end - -%@test:1 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]); -%$ t(2) = dassert(add_periods_to_array_of_dates([1950 1], 4, 2),[1950 3]); -%$ t(3) = dassert(add_periods_to_array_of_dates([1950 1], 4, 3),[1950 4]); -%$ t(4) = dassert(add_periods_to_array_of_dates([1950 1], 4, 4),[1951 1]); -%$ t(5) = dassert(add_periods_to_array_of_dates([1950 1], 4, 5),[1951 2]); -%$ t(6) = dassert(add_periods_to_array_of_dates([1950 1], 4, 6),[1951 3]); -%$ t(7) = dassert(add_periods_to_array_of_dates([1950 1], 4, 7),[1951 4]); -%$ t(8) = dassert(add_periods_to_array_of_dates([1950 1], 4, 8),[1952 1]); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ t(1) = dassert(add_periods_to_array_of_dates(repmat([1950 1],8,1), 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]); -%$ T = all(t); -%@eof:2 - -%@test:3 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 1, 1),[1951 1]); -%$ T = all(t); -%@eof:3 - -%@test:4 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1; 1950 2; 1950 3; 1950 4], 4, 1),[1950 2; 1950 3; 1950 4; 1951 1]); -%$ T = all(t); -%@eof:4 - -%@test:5 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, transpose(1:8)),[1950 2; 1950 3; 1950 4; 1951 1; 1951 2; 1951 3; 1951 4; 1952 1]); -%$ T = all(t); -%@eof:5 - -%@test:6 -%$ t(1) = dassert(add_periods_to_array_of_dates([1950 1], 4, -1),[1949 4]); -%$ t(2) = dassert(add_periods_to_array_of_dates([1950 1], 4, -2),[1949 3]); -%$ t(3) = dassert(add_periods_to_array_of_dates([1950 1], 4, -3),[1949 2]); -%$ t(4) = dassert(add_periods_to_array_of_dates([1950 1], 4, -4),[1949 1]); -%$ t(5) = dassert(add_periods_to_array_of_dates([1950 1], 4, -5),[1948 4]); -%$ t(6) = dassert(add_periods_to_array_of_dates([1950 1], 4, -6),[1948 3]); -%$ t(7) = dassert(add_periods_to_array_of_dates([1950 1], 4, -7),[1948 2]); -%$ t(8) = dassert(add_periods_to_array_of_dates([1950 1], 4, -8),[1948 1]); -%$ T = all(t); -%@eof:6 \ No newline at end of file diff --git a/matlab/utilities/dates/add_periods_to_date.m b/matlab/utilities/dates/add_periods_to_date.m deleted file mode 100644 index 6a3da248e..000000000 --- a/matlab/utilities/dates/add_periods_to_date.m +++ /dev/null @@ -1,57 +0,0 @@ -function time = add_periods_to_date(time, freq, p) % --*-- Unitary tests --*-- - -% Adds a p periods (p can be negative) to a date (or a set of dates) characterized by array time and frequency freq. - -% 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 . - -time(1) = time(1) + fix(p/freq); -time(2) = time(2) + rem(p,freq); - -if time(2)>freq - time(1) = time(1) + 1; - time(2) = time(2) - freq; -end - -if time(2)<1 - time(1) = time(1) - 1; - time(2) = time(2) + freq; -end - -%@test:1 -%$ t(1) = dassert(add_periods_to_date([1950 1], 4, 1),[1950 2]); -%$ t(2) = dassert(add_periods_to_date([1950 1], 4, 2),[1950 3]); -%$ t(3) = dassert(add_periods_to_date([1950 1], 4, 3),[1950 4]); -%$ t(4) = dassert(add_periods_to_date([1950 1], 4, 4),[1951 1]); -%$ t(5) = dassert(add_periods_to_date([1950 1], 4, 5),[1951 2]); -%$ t(6) = dassert(add_periods_to_date([1950 1], 4, 6),[1951 3]); -%$ t(7) = dassert(add_periods_to_date([1950 1], 4, 7),[1951 4]); -%$ t(8) = dassert(add_periods_to_date([1950 1], 4, 8),[1952 1]); -%$ T = all(t); -%@eof:1 - -%@test:2 -%$ t(1) = dassert(add_periods_to_date([1950 1], 4, -1),[1949 4]); -%$ t(2) = dassert(add_periods_to_date([1950 1], 4, -2),[1949 3]); -%$ t(3) = dassert(add_periods_to_date([1950 1], 4, -3),[1949 2]); -%$ t(4) = dassert(add_periods_to_date([1950 1], 4, -4),[1949 1]); -%$ t(5) = dassert(add_periods_to_date([1950 1], 4, -5),[1948 4]); -%$ t(6) = dassert(add_periods_to_date([1950 1], 4, -6),[1948 3]); -%$ t(7) = dassert(add_periods_to_date([1950 1], 4, -7),[1948 2]); -%$ t(8) = dassert(add_periods_to_date([1950 1], 4, -8),[1948 1]); -%$ T = all(t); -%@eof:2 \ No newline at end of file diff --git a/matlab/utilities/dates/date2string.m b/matlab/utilities/dates/date2string.m deleted file mode 100644 index 26358ee23..000000000 --- a/matlab/utilities/dates/date2string.m +++ /dev/null @@ -1,51 +0,0 @@ -function s = date2string(varargin) - -% Returns date as a string. -% -% INPUTS -% o varargin{1} + dates object with one element, if nargin==1. -% + 1*2 vector of integers (first element is the year, second element is the subperiod), if nargin==2. -% o varargin{2} integer scalar equal to 1, 4, 12 or 52 (frequency). -% -% OUTPUTS -% o s string. - -% 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 isequal(nargin,1) - if ~(isa(varargin{1},'dates') && isequal(length(varargin{1}),1)) - error(['dates::format: Input argument ' inputname(1) ' has to be a dates object with one element!']) - else - time = varargin{1}.time; - freq = varargin{1}.freq; - end -end - -if isequal(nargin,2) - if ~(isvector(varargin{1}) && isequal(length(varargin{1}),2) && all(isint(varargin{1})) && isscalar(varargin{2} && ismember(varargin{2},[1 4 12 52]))) - error(['dates::format: First input must be a 1*2 vector of integers and second input must be a scalar integer (1, 4, 12 or 52)!']) - else - time = varargin{1}; - freq = varargin{2}; - end -end - -s = [num2str(time(1)) freq2string(freq)]; -if freq>1 - s = strcat(s, num2str(time(2))); -end \ No newline at end of file diff --git a/matlab/utilities/dates/freq2string.m b/matlab/utilities/dates/freq2string.m deleted file mode 100644 index 2d12f8def..000000000 --- a/matlab/utilities/dates/freq2string.m +++ /dev/null @@ -1,37 +0,0 @@ -function s = freq2string(freq) - -% INPUTS -% o freq scalar integer, equal to 1, 4, 12 or 52 (resp. annual, quaterly, monthly or weekly) -% -% OUTPUTS -% o s character, equal to Y, Q, M or W (resp. annual, quaterly, monthly or weekly) - -% 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 . - -switch freq - case 1 - s = 'Y'; - case 4 - s = 'Q'; - case 12 - s = 'M'; - case 52 - s = 'W'; - otherwise - error('dates::freq2string: Unknown frequency!') -end \ No newline at end of file diff --git a/matlab/utilities/dates/isdate.m b/matlab/utilities/dates/isdate.m deleted file mode 100644 index 2659ec39a..000000000 --- a/matlab/utilities/dates/isdate.m +++ /dev/null @@ -1,55 +0,0 @@ -function b = isdate(str) % --*-- Unitary tests --*-- - -% Tests if the input string can be interpreted as a date. -% -% INPUTS -% o str string. -% -% OUTPUTS -% o b integer scalar, equal to 1 if str can be interpreted as a date or 0 otherwise. - -% 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 isnumeric(str) && isscalar(str) - b = true; - return -end - -b = isstringdate(str); - -%@test:1 -%$ -%$ date_1 = 1950; -%$ date_2 = '1950m2'; -%$ date_3 = '-1950m2'; -%$ date_4 = '1950m52'; -%$ date_5 = ' 1950'; -%$ date_6 = '1950Y'; -%$ date_7 = '-1950a'; -%$ date_8 = '1950m '; -%$ -%$ t(1) = dassert(isdate(date_1),true); -%$ t(2) = dassert(isdate(date_2),true); -%$ t(3) = dassert(isdate(date_3),true); -%$ t(4) = dassert(isdate(date_4),false); -%$ t(5) = dassert(isdate(date_5),false); -%$ t(6) = dassert(isdate(date_6),true); -%$ t(7) = dassert(isdate(date_7),true); -%$ t(8) = dassert(isdate(date_8),false); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/utilities/dates/isdates.m b/matlab/utilities/dates/isdates.m deleted file mode 100644 index 33b679020..000000000 --- a/matlab/utilities/dates/isdates.m +++ /dev/null @@ -1,22 +0,0 @@ -function B = isdates(A) - -% Tests if the input A is a dates object. - -% 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 = isa(A,'dates'); \ No newline at end of file diff --git a/matlab/utilities/dates/isfreq.m b/matlab/utilities/dates/isfreq.m deleted file mode 100644 index 79ba42c53..000000000 --- a/matlab/utilities/dates/isfreq.m +++ /dev/null @@ -1,39 +0,0 @@ -function B = isfreq(A) - -% Tests if A can be interpreted as a frequency. -% -% INPUTS -% o A scalar integer or character. -% -% OUTPUTS -% o B scalar integer equal to one if A can be interpreted as a frequency, zero otherwise. - -% 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 = 0; - -if ischar(A) - if isequal(length(A),1) && ismember(upper(A),{'Y','A','Q','M','W'}) - B = 1; - return - end -end - -if isnumeric(A) && isequal(length(A),1) && ismember(A,[1 4 12 52]) - B = 1; -end \ No newline at end of file diff --git a/matlab/utilities/dates/ismonthly.m b/matlab/utilities/dates/ismonthly.m deleted file mode 100644 index b722b359f..000000000 --- a/matlab/utilities/dates/ismonthly.m +++ /dev/null @@ -1,58 +0,0 @@ -function b = ismonthly(str) % --*-- Unitary tests --*-- - -% Tests if the input can be interpreted as a monthly date. -% -% INPUTS -% o str string. -% -% OUTPUTS -% o b integer scalar, equal to 1 if str can be interpreted as a monthly date or 0 otherwise. - -% 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 . - -if ischar(str) - if isempty(regexp(str,'^-?[0-9]*[Mm]([1-9]|1[0-2])$','once')) - b = 0; - else - b = 1; - end -else - b = 0; -end - -%@test:1 -%$ -%$ date_1 = '1950M2'; -%$ date_2 = '1950m2'; -%$ date_3 = '-1950m2'; -%$ date_4 = '1950m12'; -%$ date_5 = '1950 azd '; -%$ date_6 = '1950Y'; -%$ date_7 = '1950Q3'; -%$ date_8 = '1950m24'; -%$ -%$ t(1) = dassert(ismonthly(date_1),1); -%$ t(2) = dassert(ismonthly(date_2),1); -%$ t(3) = dassert(ismonthly(date_3),1); -%$ t(4) = dassert(ismonthly(date_4),1); -%$ t(5) = dassert(ismonthly(date_5),0); -%$ t(6) = dassert(ismonthly(date_6),0); -%$ t(7) = dassert(ismonthly(date_7),0); -%$ t(8) = dassert(ismonthly(date_8),0); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/utilities/dates/isquaterly.m b/matlab/utilities/dates/isquaterly.m deleted file mode 100644 index d8d814671..000000000 --- a/matlab/utilities/dates/isquaterly.m +++ /dev/null @@ -1,56 +0,0 @@ -function b = isquaterly(str) % --*-- Unitary tests --*-- - -% Tests if the input can be interpreted as a quaterly date. -% -% INPUTS -% o str string. -% -% OUTPUTS -% o b integer scalar, equal to 1 if str can be interpreted as a quaterly date or 0 otherwise. - -% 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 . - -if ischar(str) - if isempty(regexp(str,'^-?[0-9]*[Qq][1-4]$','once')) - b = 0; - else - b = 1; - end -else - b = 0; -end - -%@test:1 -%$ -%$ date_1 = '1950Q2'; -%$ date_2 = '1950q2'; -%$ date_3 = '-1950q2'; -%$ date_4 = '1950q12'; -%$ date_5 = '1950 azd '; -%$ date_6 = '1950Y'; -%$ date_7 = '1950m24'; -%$ -%$ t(1) = dassert(isquaterly(date_1),1); -%$ t(2) = dassert(isquaterly(date_2),1); -%$ t(3) = dassert(isquaterly(date_3),1); -%$ t(4) = dassert(isquaterly(date_4),0); -%$ t(5) = dassert(isquaterly(date_5),0); -%$ t(6) = dassert(isquaterly(date_6),0); -%$ t(7) = dassert(isquaterly(date_7),0); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/utilities/dates/isstringdate.m b/matlab/utilities/dates/isstringdate.m deleted file mode 100644 index d9c6d5e7c..000000000 --- a/matlab/utilities/dates/isstringdate.m +++ /dev/null @@ -1,54 +0,0 @@ -function b = isstringdate(str) % --*-- Unitary tests --*-- - -% Tests if the input string can be interpreted as a date. -% -% INPUTS -% o str string. -% -% OUTPUTS -% o b integer scalar, equal to 1 if str can be interpreted as a date or 0 otherwise. - -% 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 ischar(str) - b = isquaterly(str) || isyearly(str) || ismonthly(str) || isweekly(str); -else - b = 0; -end - -%@test:1 -%$ -%$ date_1 = '1950M2'; -%$ date_2 = '1950m2'; -%$ date_3 = '-1950m2'; -%$ date_4 = '1950m52'; -%$ date_5 = ' 1950'; -%$ date_6 = '1950Y'; -%$ date_7 = '-1950a'; -%$ date_8 = '1950m '; -%$ -%$ t(1) = dassert(isstringdate(date_1),true); -%$ t(2) = dassert(isstringdate(date_2),true); -%$ t(3) = dassert(isstringdate(date_3),true); -%$ t(4) = dassert(isstringdate(date_4),false); -%$ t(5) = dassert(isstringdate(date_5),false); -%$ t(6) = dassert(isstringdate(date_6),true); -%$ t(7) = dassert(isstringdate(date_7),true); -%$ t(8) = dassert(isstringdate(date_8),false); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/utilities/dates/issubperiod.m b/matlab/utilities/dates/issubperiod.m deleted file mode 100644 index 5f7a7560b..000000000 --- a/matlab/utilities/dates/issubperiod.m +++ /dev/null @@ -1,24 +0,0 @@ -function C = issubperiod(A,B) - -% 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 isfreq(B) - C = all(isint(A)) && all(A>=1) && all(A<=B); -else - error('issubperiod:: Second input argument must be equal to 1, 4, 12 or 52 (frequency)!') -end \ No newline at end of file diff --git a/matlab/utilities/dates/isweekly.m b/matlab/utilities/dates/isweekly.m deleted file mode 100644 index b7fbe934a..000000000 --- a/matlab/utilities/dates/isweekly.m +++ /dev/null @@ -1,58 +0,0 @@ -function b = isweekly(str) % --*-- Unitary tests --*-- - -% Tests if the input can be interpreted as a weekly date. -% -% INPUTS -% o str string. -% -% OUTPUTS -% o b integer scalar, equal to 1 if str can be interpreted as a weekly date or 0 otherwise. - -% 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 . - -if ischar(str) - if isempty(regexp(str,'^-?[0-9]*[Ww]([1-9]|[1-4][0-9]|5[0-2])$','once')) - b = 0; - else - b = 1; - end -else - b = 0; -end - -%@test:1 -%$ -%$ date_1 = '1950W2'; -%$ date_2 = '1950w2'; -%$ date_3 = '-1950w2'; -%$ date_4 = '1950w22'; -%$ date_5 = '1950 azd '; -%$ date_6 = '1950Y'; -%$ date_7 = '1950Q3'; -%$ date_8 = '1950m54'; -%$ -%$ t(1) = dassert(isweekly(date_1),1); -%$ t(2) = dassert(isweekly(date_2),1); -%$ t(3) = dassert(isweekly(date_3),1); -%$ t(4) = dassert(isweekly(date_4),1); -%$ t(5) = dassert(isweekly(date_5),0); -%$ t(6) = dassert(isweekly(date_6),0); -%$ t(7) = dassert(isweekly(date_7),0); -%$ t(8) = dassert(isweekly(date_8),0); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/utilities/dates/isyearly.m b/matlab/utilities/dates/isyearly.m deleted file mode 100644 index bf8c03568..000000000 --- a/matlab/utilities/dates/isyearly.m +++ /dev/null @@ -1,58 +0,0 @@ -function b = isyearly(str) % --*-- Unitary tests --*-- - -% Tests if the input can be interpreted as a yearly date. -% -% INPUTS -% o str string. -% -% OUTPUTS -% o b integer scalar, equal to 1 if str can be interpreted as a yearly date or 0 otherwise. - -% 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 . - -if ischar(str) - if isempty(regexp(str,'^-?[0-9]*[YyAa]$','once')) - b = 0; - else - b = 1; - end -else - b = 0; -end - -%@test:1 -%$ -%$ date_1 = '1950M2'; -%$ date_2 = '1950m2'; -%$ date_3 = '-1950m2'; -%$ date_4 = '1950m12'; -%$ date_5 = '1950 azd '; -%$ date_6 = '1950Y'; -%$ date_7 = '-1950a'; -%$ date_8 = '1950m24'; -%$ -%$ t(1) = dassert(isyearly(date_1),0); -%$ t(2) = dassert(isyearly(date_2),0); -%$ t(3) = dassert(isyearly(date_3),0); -%$ t(4) = dassert(isyearly(date_4),0); -%$ t(5) = dassert(isyearly(date_5),0); -%$ t(6) = dassert(isyearly(date_6),1); -%$ t(7) = dassert(isyearly(date_7),1); -%$ t(8) = dassert(isyearly(date_8),0); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/utilities/dates/string2date.m b/matlab/utilities/dates/string2date.m deleted file mode 100644 index fed6ff8f8..000000000 --- a/matlab/utilities/dates/string2date.m +++ /dev/null @@ -1,109 +0,0 @@ -function date = string2date(a) % --*-- Unitary tests --*-- - -% 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 . - -date = struct('freq', NaN, 'time', NaN(1,2)); - -if ~ischar(a) || ~isdate(a) - error('dates::string2date: Input must be a string that can be interpreted as a date!'); -end - -if isyearly(a) - year = 1:(regexp(a,'[AaYy]')-1); - date.freq = 1; - date.time = write_time_field_y(a, year); - return -end - -if isquaterly(a) - year = 1:(regexp(a,'[Qq]')-1); - date.freq = 4; - date.time = write_time_field(a, year); - return -end - -if ismonthly(a) - year = 1:(regexp(a,'[Mm]')-1); - date.freq = 12; - date.time = write_time_field(a, year); - return -end - -if isweekly(a) - year = 1:(regexp(a,'[Ww]')-1); - date.freq = 52; - date.time = write_time_field(a, year); - return -end - - -function b = write_time_field(c, d) - b(1) = str2double(c(d)); - b(2) = str2double(c(d(end)+2:end)); - -function b = write_time_field_y(c, d) - b(1) = str2double(c(d)); - b(2) = 1; - -%@test:1 -%$ -%$ % Define some dates -%$ date_1 = '1950Q2'; -%$ date_2 = '1950m10'; -%$ date_3 = '1950w50'; -%$ date_4 = '1950a'; -%$ date_5 = '1967y'; -%$ date_6 = '2009A'; -%$ -%$ % Define expected results. -%$ e_date_1 = [1950 2]; -%$ e_freq_1 = 4; -%$ e_date_2 = [1950 10]; -%$ e_freq_2 = 12; -%$ e_date_3 = [1950 50]; -%$ e_freq_3 = 52; -%$ e_date_4 = [1950 1]; -%$ e_freq_4 = 1; -%$ e_date_5 = [1967 1]; -%$ e_freq_5 = 1; -%$ e_date_6 = [2009 1]; -%$ e_freq_6 = 1; -%$ -%$ % Call the tested routine. -%$ d1 = string2date(date_1); -%$ d2 = string2date(date_2); -%$ d3 = string2date(date_3); -%$ d4 = string2date(date_4); -%$ d5 = string2date(date_5); -%$ d6 = string2date(date_6); -%$ -%$ % Check the results. -%$ t(1) = dassert(d1.time,e_date_1); -%$ t(2) = dassert(d2.time,e_date_2); -%$ t(3) = dassert(d3.time,e_date_3); -%$ t(4) = dassert(d4.time,e_date_4); -%$ t(5) = dassert(d5.time,e_date_5); -%$ t(6) = dassert(d6.time,e_date_6); -%$ t(7) = dassert(d1.freq,e_freq_1); -%$ t(8) = dassert(d2.freq,e_freq_2); -%$ t(9) = dassert(d3.freq,e_freq_3); -%$ t(10) = dassert(d4.freq,e_freq_4); -%$ t(11)= dassert(d5.freq,e_freq_5); -%$ t(12)= dassert(d6.freq,e_freq_6); -%$ T = all(t); -%@eof:1 \ No newline at end of file diff --git a/matlab/utilities/dates/string2freq.m b/matlab/utilities/dates/string2freq.m deleted file mode 100644 index ea04c3964..000000000 --- a/matlab/utilities/dates/string2freq.m +++ /dev/null @@ -1,37 +0,0 @@ -function freq = string2freq(s) - -% INPUTS -% o s character, equal to Y, Q, M or W (resp. annual, quaterly, monthly or weekly) -% -% OUTPUTS -% o freq scalar integer, equal to 1, 4, 12 or 52 (resp. annual, quaterly, monthly or weekly) - -% 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 . - -switch upper(s) - case {'Y','A'} - freq = 1; - case 'Q' - freq = 4; - case 'M' - freq = 12; - case 'W' - freq = 52; - otherwise - error('dates::freq2string: Unknown frequency!') -end \ No newline at end of file