diff --git a/matlab/default_option_values.m b/matlab/default_option_values.m index 8de89f5f7e6c0b4c00bbae1bcf58fedbe061add9..d3773fc9377e6432e8e1689878908ca1e5743213 100644 --- a/matlab/default_option_values.m +++ b/matlab/default_option_values.m @@ -12,7 +12,7 @@ function options_ = default_option_values(M_) % SPECIAL REQUIREMENTS % none -% Copyright © 2018-2023 Dynare Team +% Copyright © 2018-2024 Dynare Team % % This file is part of Dynare. % @@ -372,8 +372,8 @@ options_.initial_period = NaN; %dates(1,1); options_.no_init_estimation_check_first_obs=false; options_.dataset.file = []; options_.dataset.series = []; -options_.dataset.firstobs = dates(); -options_.dataset.lastobs = dates(); +options_.dataset.first_obs = dates(); +options_.dataset.last_obs = dates(); options_.dataset.nobs = NaN; options_.dataset.xls_sheet = []; options_.dataset.xls_range = []; diff --git a/matlab/histvalf_initvalf.m b/matlab/histvalf_initvalf.m index b9727f86eb7ec8a31c11ef7ab159311137a758db..36aaf6200502c6ddac171db34c5b5f9611fcbf6e 100644 --- a/matlab/histvalf_initvalf.m +++ b/matlab/histvalf_initvalf.m @@ -121,104 +121,82 @@ nobs0 = series.nobs; first_obs_ispresent = false; last_obs_ispresent = false; -first_obs = periods(1); if isfield(options, 'first_obs') && ~isempty(options.first_obs) - if options.first_obs < 1 - error('%s_FILE: first_obs must be a positive number', caller) - elseif options.first_obs > nobs0 - error('%s_FILE: first_obs = %d is larger than the number of observations in the data file (%d)', ... - caller, options.first_obs, nobs0) - elseif isfield(options, 'first_simulation_period') - if options.first_obs == options.first_simulation_period - M_.orig_maximum_lag - first_obs = periods(options.first_obs); + if isa(options.first_obs, 'numeric') + if options.first_obs < 1 + error('%s_FILE: first_obs must be a positive number', caller) + elseif options.first_obs > nobs0 + error('%s_FILE: first_obs = %d is larger than the number of observations in the data file (%d)', ... + caller, options.first_obs, nobs0) else - error('%s_FILE: first_obs = %d and first_simulation_period = %d have values inconsistent with a maximum lag of %d periods', ... - caller, options.first_obs, options.first_simulation_period, M_.orig_maximum_lag) - end - elseif isfield(options, 'firstsimulationperiod') - if periods(options.first_obs) == options.firstsimulationperiod - M_.orig_maximum_lag first_obs = periods(options.first_obs); - else - error('%s_FILE: first_obs = %d and first_simulation_period = %s have values inconsistent with a maximum lag of %d periods', ... - caller, options.first_obs, options.firstsimulationperiod, M_.orig_maximum_lag) end + elseif isa(options.first_obs, 'dates') + first_obs = options.first_obs; else - first_obs = periods(options.first_obs); + error('Incorrect class for the value of first_obs option') end - first_obs_ispresent = true; -end - -if isfield(options, 'firstobs') && ~isempty(options.firstobs) if isfield(options, 'first_simulation_period') - if options.firstobs == periods(options.first_simulation_period) - M_.orig_maximum_lag - first_obs = options.firstobs; - else - error('%s_FILE: first_obs = %s and first_simulation_period = %d have values inconsistent with a maximum lag of %d periods', ... - caller, options.firstobs, options.first_simulation_period, M_.orig_maximum_lag) - end - elseif isfield(options, 'firstsimulationperiod') - if options.firstobs == options.firstsimulationperiod - M_.orig_maximum_lag - first_obs = options.firstobs; + if isa(options.first_simulation_period, 'numeric') + if first_obs ~= periods(options.first_simulation_period) - M_.orig_maximum_lag + error('%s_FILE: first_obs = %s and first_simulation_period = %d have values inconsistent with a maximum lag of %d periods', ... + caller, first_obs, options.first_simulation_period, M_.orig_maximum_lag) + end + elseif isa(options.first_simulation_period, 'dates') + if first_obs ~= options.first_simulation_period - M_.orig_maximum_lag + error('%s_FILE: first_obs = %s and first_simulation_period = %s have values inconsistent with a maximum lag of %d periods', ... + caller, first_obs, options.first_simulation_period, M_.orig_maximum_lag) + end else - error('%s_FILE: firstobs = %s and first_simulation_period = %s have values inconsistent with a maximum lag of %d periods', ... - caller, options.firstobs, options.firstsimulationperiod, M_.orig_maximum_lag) + error('Incorrect class for the value of first_simulation_period option') end - else - first_obs = options.firstobs; end first_obs_ispresent = true; +else + first_obs = periods(1); end -if ~first_obs_ispresent - if isfield(options, 'first_simulation_period') +if ~first_obs_ispresent && isfield(options, 'first_simulation_period') + if isa(options.first_simulation_period, 'numeric') if options.first_simulation_period < M_.orig_maximum_lag error('%s_FILE: first_simulation_period = %d must be larger than the maximum lag (%d)', ... caller, options.first_simulation_period, M_.orig_maximum_lag) elseif options.first_simulation_period > nobs0 error('%s_FILE: first_simulations_period = %d is larger than the number of observations in the data file (%d)', ... - caller, options.first_obs, nobs0) - else - first_obs = periods(options.first_simulation_period) - M_.orig_maximum_lag; + caller, options.first_obs, nobs0) end + first_obs = periods(options.first_simulation_period) - M_.orig_maximum_lag; first_obs_ispresent = true; - elseif isfield(options, 'firstsimulationperiod') - first_obs = options.firstsimulationperiod - M_.orig_maximum_lag; + elseif isa(options.first_simulation_period, 'dates') + first_obs = options.first_simulation_period - M_.orig_maximum_lag; first_obs_ispresent = true; + else + error('Incorrect class for the value of first_simulation_period option') end end if isfield(options, 'last_obs') - if options.last_obs > nobs0 - error('%s_FILE: last_obs = %d is larger than the number of observations in the dataset (%d)', caller, options.last_obs, nobs0) - elseif first_obs_ispresent - if nobs > 0 && (periods(options.last_obs) ~= first_obs + nobs - 1) - error('%s_FILE: FIRST_OBS, LAST_OBS and NOBS contain inconsistent information. Use only two of these options.', caller) + if isa(options.last_obs, 'numeric') + if options.last_obs > nobs0 + error('%s_FILE: last_obs = %d is larger than the number of observations in the dataset (%d)', caller, options.last_obs, nobs0) else last_obs = periods(options.last_obs); end - else - last_obs = periods(options.last_obs); - if nobs > 0 - first_obs = last_obs - nobs + 1; + elseif isa(options.last_obs, 'dates') + if options.last_obs > series.last + error('%s_FILE: last_obs = %s is larger than the number of observations in the dataset (%s)', caller, options.last_obs, series.last) else - first_obs = periods(1); + last_obs = options.last_obs; end end -elseif isfield(options, 'lastobs') - if options.lastobs > series.last - error('%s_FILE: last_obs = %s is larger than the number of observations in the dataset (%s)', caller, options.lastobs, series.last) - elseif first_obs_ispresent - if nobs > 0 && (options.lastobs ~= first_obs + nobs - 1) + + if first_obs_ispresent + if nobs > 0 && (last_obs ~= first_obs + nobs - 1) error('%s_FILE: FIRST_OBS, LAST_OBS and NOBS contain inconsistent information. Use only two of these options.', caller) - else - last_obs = options.lastobs; end else - last_obs = options.last_obs; if nobs > 0 first_obs = last_obs - nobs + 1; - else - first_obs = periods(1); end end elseif nobs > 0 @@ -228,28 +206,19 @@ else end if isfield(options, 'last_simulation_period') - lastsimulationperiod = periods(options.last_simulation_period); -end - -if isfield(options, 'lastsimulationperiod') - lastsimulationperiod = options.lastsimulationperiod; -end - - -if exist('lastsimulationperiod', 'var') - if lastsimulationperiod<=last_obs-M_.orig_maximum_lead + if isa(options.last_simulation_period, 'numeric') + lastsimulationperiod = periods(options.last_simulation_period); + elseif isa(options.last_simulation_period, 'dates') + lastsimulationperiod = options.last_simulation_period; + else + error('Incorrect class for the value of last_simulation_period option') + end + if lastsimulationperiod <= last_obs-M_.orig_maximum_lead last_obs = lastsimulationperiod+M_.orig_maximum_lead; else error('%s_FILE: LAST_SIMULATION_PERIOD is too large compared to the available data.', caller) end -end - -if exist('lastsimulationperiod', 'var') && exist('firstsimulationperiod', 'var') - p = lastsimulationperiod-firstsimulationperiod+1; -elseif exist('lastsimulationperiod', 'var') p = lastsimulationperiod-(first_obs+M_.orig_maximum_lag)+1; -elseif exist('firstsimulationperiod', 'var') - p = (last_obs-M_.orig_maximum_lead)-firstsimulationperiod+1; else p = (last_obs-M_.orig_maximum_lead)-(first_obs+M_.orig_maximum_lag)+1; end diff --git a/matlab/utilities/dataset/makedataset.m b/matlab/utilities/dataset/makedataset.m index 7455aefb1d569cf158b833d71995a75cfcf2416f..9061021c4c63db9dfa071455ddc2bf42e873b8d4 100644 --- a/matlab/utilities/dataset/makedataset.m +++ b/matlab/utilities/dataset/makedataset.m @@ -22,7 +22,7 @@ function [dataset_, dataset_info, newdatainterface] = makedataset(options_, init % % See also dynare_estimation_init -% Copyright © 2014-2023 Dynare Team +% Copyright © 2014-2024 Dynare Team % % This file is part of Dynare. % @@ -179,25 +179,25 @@ end % Set firstobs, lastobs and nobs if newdatainterface - if isempty(options_.dataset.firstobs) + if isempty(options_.dataset.first_obs) % first_obs option was not used in the data command. firstobs = dataset_.init; else - firstobs = options_.dataset.firstobs; + firstobs = options_.dataset.first_obs; end if isnan(options_.dataset.nobs) % nobs option was not used in the data command. - if isempty(options_.dataset.lastobs) + if isempty(options_.dataset.last_obs) % last_obs option was not used in the data command. nobs = dataset_.nobs; lastobs = dataset_.dates(end); else - lastobs = options_.dataset.lastobs; + lastobs = options_.dataset.last_obs; nobs = lastobs-firstobs+1; end else nobs = options_.dataset.nobs; - if isempty(options_.dataset.lastobs) + if isempty(options_.dataset.last_obs) % last_obs option was not used in the data command. lastobs = firstobs+(nobs-1); else diff --git a/preprocessor b/preprocessor index 1a1f249fc27d091d146329dd5c5e694f6e3e9cc5..b2b2801bcf063111214220a982c51b2c3eafe1f0 160000 --- a/preprocessor +++ b/preprocessor @@ -1 +1 @@ -Subproject commit 1a1f249fc27d091d146329dd5c5e694f6e3e9cc5 +Subproject commit b2b2801bcf063111214220a982c51b2c3eafe1f0