Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
D
dseries
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dynare
dseries
Commits
99d80c76
Commit
99d80c76
authored
10 years ago
by
Stéphane Adjemian
Browse files
Options
Downloads
Patches
Plain Diff
Rewrote constructor (new syntax). Adapted initialization routine.
parent
d31e6a66
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/@dates/dates.m
+101
-146
101 additions, 146 deletions
src/@dates/dates.m
src/initialize_dates_toolbox.m
+0
-3
0 additions, 3 deletions
src/initialize_dates_toolbox.m
with
101 additions
and
149 deletions
src/@dates/dates.m
+
101
−
146
View file @
99d80c76
function
dd
=
dates
(
varargin
)
%
--*-
-
Unitary
tests
--*--
classdef
dates
<
handle
%
@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
.
% Copyright (C) 2014 Dynare Team
%
%
Dynar
e
is
free
software
:
you
can
redistribute
it
and
/
or
modify
%
This cod
e 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
,
% Dynare
dates submodule
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.
...
...
@@ -62,107 +15,109 @@ function dd = dates(varargin) % --*-- Unitary tests --*--
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
%
Initialization
.
if
nargin
>
0
&&
ischar
(
varargin
{
1
})
&&
isequal
(
varargin
{
1
},
'
initialize
'
)
dd
=
struct
(
'
ndat
'
,
0
,
'
freq
'
,
NaN
(
0
),
'
time
'
,
NaN
(
0
,
2
));
dd
=
class
(
dd
,
'
dates
'
);
assignin
(
'
base
','
emptydatesobject
'
,
dd
);
return
end
dd
=
evalin
(
'
base
','
emptydatesobject
'
);
if
isequal
(
nargin
,
0
)
%
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
};
properties
ndat
=
[];
% Number of dates (integer scalar)
freq
=
[];
% Frequency (integer scalar)
time
=
[];
% Array (ndat rows and two columns)
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
))
methods
function
o
=
dates
(
varargin
)
if
~
nargin
% Returns empty dates object.
o
.
ndat
=
0
;
o
.
freq
=
NaN
(
0
);
o
.
time
=
NaN
(
0
,
2
);
return
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
);
if
all
(
cellfun
(
@
isdates
,
varargin
))
% Concatenates dates objects in a dates object.
o
=
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
)
o
.
freq
=
tmp
(
1
)
.
freq
;
else
error
(
sprintf
(
'
dates
::
dates
:
Wrong
calling
sequence
of
the
constructor
!
Second
column
of
the
l
as
t
input
must
contain
integers
between
1
and
%
i
.
'
,
dd
.
freq
)
)
error
(
'dates:ArgCheck'
,
'All dates passed
as input
s
must
have the same frequency!'
)
end
else
error
(
'
dates
::
dates
:
Wrong
calling
sequence
!
Second
input
argument
must
be
an
array
of
integers
.
'
)
o
.
ndat
=
length
(
tmp
);
o
.
time
=
transpose
(
reshape
([
tmp
.
time
],
2
,
o
.
ndat
));
return
end
else
error
(
'
dates
::
dates
:
Wrong
calling
sequence
!
'
)
end
end
return
end
if
isequal
(
nargin
,
1
)
&&
isfreq
(
varargin
{
1
})
% Instantiate an empty dates object (only set frequency)
o
=
dates
();
if
ischar
(
varargin
{
1
})
o
.
freq
=
string2freq
(
varargin
{
1
});
else
o
.
freq
=
varargin
{
1
};
end
return
end
if
isequal
(
nargin
,
3
)
&&
isfreq
(
varargin
{
1
})
o
=
dates
();
if
ischar
(
varargin
{
1
})
o
.
freq
=
string2freq
(
varargin
{
1
});
else
o
.
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
}
<=
o
.
freq
)
o
.
time
=
[
varargin
{
2
}(:),
varargin
{
3
}(:)];
o
.
ndat
=
size
(
o
.
time
,
1
);
else
error
(
'dates:ArgCheck'
,
'Third input must contain integers between 1 and %i.'
,
o
.
freq
)
end
else
error
(
'dates:ArgCheck'
,
'Third input must be a vector of integers.'
)
end
else
error
(
'dates:ArgCheck'
,
'Second input must be a vector of integers.'
)
end
return
end
if
isequal
(
nargin
,
2
)
&&
isfreq
(
varargin
{
1
})
o
=
dates
();
if
ischar
(
varargin
{
1
})
o
.
freq
=
string2freq
(
varargin
{
1
});
else
o
.
freq
=
varargin
{
1
};
end
if
isequal
(
o
.
freq
,
1
)
if
(
isnumeric
(
varargin
{
2
})
&&
isvector
(
varargin
{
2
})
&&
isint
(
varargin
{
2
}))
o
.
time
=
[
varargin
{
2
},
ones
(
length
(
varargin
{
2
}),
1
)];
o
.
ndat
=
size
(
o
.
time
,
1
);
return
else
error
(
'dates:ArgCheck'
,
'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
)
<=
o
.
freq
)
o
.
time
=
[
varargin
{
2
}(:,
1
),
varargin
{
2
}(:,
2
)];
o
.
ndat
=
size
(
o
.
time
,
1
);
else
error
(
'dates:ArgCheck'
,
'Second column of the last input must contain integers between 1 and %i.'
,
o
.
freq
)
end
else
error
(
'dates:ArgCheck'
,
'Second input argument must be an array of integers.'
)
end
else
error
(
'dates:ArgCheck'
,
'Wrong calling sequence!'
)
end
end
return
end
error
(
'dates:ArgCheck'
,
'You should first read the manual!'
)
end
% dates constructor.
end
% methods
end
% classdef
error
(
'
dates
::
dates
:
Wrong
calling
sequence
!
'
)
%@test:1
%$ % Define some dates
...
...
This diff is collapsed.
Click to expand it.
src/initialize_dates_toolbox.m
+
0
−
3
View file @
99d80c76
...
...
@@ -6,9 +6,6 @@ addpath([dates_src_root '/utilities/is'])
addpath
([
dates_src_root
'/utilities/op'
])
addpath
([
dates_src_root
'/utilities/convert'
])
% Add empty dates object in the base workspace
dates
(
'initialize'
);
% Add missing routines if dynare is not in the path
if
~
exist
(
'isint'
,
'file'
)
addpath
([
dates_src_root
'/utilities/missing/isint'
])
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment