Sébastien Villemot
7acf278370
Performance improvement of chain rule derivation
...
Commit 23b0c12d8e
introduced caching in chain
rule derivation (used by block decomposition), which increased speed for mfs >
0, but actually decreased it for mfs=0.
This patch introduces the pre-computation of derivatives which are known to be
zero using symbolic a priori (similarly to what is done in the non-chain rule
context). The algorithms are now identical between the two contexts (both
symbolic a priori + caching), the difference being that in the chain rule
context, the symbolic a priori and the cache are not stored within the ExprNode
class, since they depend on the list of recursive variables.
This patch brings a significant performant improvement for all values of the
“mfs” option (the improvement is greater for small values of “mfs”).
2023-03-02 17:52:36 +01:00
Sébastien Villemot
f8edce01ec
Minor simplification
2023-03-02 17:28:03 +01:00
Sébastien Villemot
bf8ca27a47
Make ExprNode::prepareForDerivation() a protected member (was public)
2023-03-02 16:08:55 +01:00
Sébastien Villemot
fe83933b1d
Bugfix: undefined behaviour in AbstractExternalFunctionNode::prepareForDerivation()
...
Input and output ranges should not overlap when calling std::set_union(),
otherwise the behaviour is undefined.
It seems that in this precise case the computation would still be
correct (though inefficient), because of the properties of std::set or because
of the specific implementation in libstdc++. But it’s better to be on the safe
side.
2023-03-02 15:55:51 +01:00
Sébastien Villemot
41052ccb74
Optimization for derivation of STEADY_STATE(…) operator in a dynamic context
...
In a dynamic context, the only potentially non-null derivatives of
STEADY_STATE(…) are the parameters. We know that the derivatives w.r.t. other
variables are zero, so store that information in non_null_derivatives.
2023-03-02 15:11:49 +01:00
Sébastien Villemot
d64317a64f
Minor simplification
2023-03-02 15:11:47 +01:00
Sébastien Villemot
ae83974e0e
Minor simplification using if with initialization
2023-02-28 16:27:31 +01:00
Sébastien Villemot
62c455ff56
Misc simplifications using STL algorithms
2023-02-28 16:27:29 +01:00
Sébastien Villemot
008a80910e
Bytecode: move CodeLoad class out of the preprocessor
2023-02-21 16:01:27 -05:00
Sébastien Villemot
a88b921991
Bytecode: improve deserialization routines for FCALL and FBEGINBLOCK
2023-02-17 16:20:40 -05:00
Sébastien Villemot
cf3ab36ac8
Bytecode: simplify specialized serialization methods
2023-02-17 15:31:22 -05:00
Sébastien Villemot
114d8eadfb
New “homotopy_alt_starting_point” option to “perfect_foresight_solver” command
2023-02-07 14:44:59 -05:00
Sébastien Villemot
389a2647d3
Block decomposition: make mfs=1 the default
...
NB: mfs=3 is nevertheless used when “block” option has not been used, and the
model is purely backward/forward or static, for solve_algo={12,14}.
2023-01-25 18:38:58 +01:00
Sébastien Villemot
dc966014a3
Remove some incorrect normalization rules for the case mfs=3
...
More precisely, incorrect equation normalization could occur in the presence of
cos, sin, tan, cosh and x^n (where n is an even integer).
Also add some comments explaining why some other rules are (hopefully) correct.
2023-01-25 17:14:01 +01:00
Sébastien Villemot
0ddcf81ac0
Fix typo
2023-01-25 16:50:56 +01:00
Sébastien Villemot
1c813a1cf9
Run detrending engine if trend variables are present, even if unused in a var(deflator=…) statement
...
Closes : #113
2023-01-24 14:14:40 +01:00
Sébastien Villemot
74e5bbf537
Drop dynamic_g1_nz.m generated file
...
No longer needed since perfect_foresight_problem MEX has moved to the sparse
representation.
2023-01-23 16:20:12 +01:00
Sébastien Villemot
4f9241442c
Fix size of dynamic derivatives (legacy representation) when there are unused exogenous and “nostrict” option is given
2023-01-19 11:00:32 +01:00
Sébastien Villemot
c47d91c20b
Block decomposition: another fix for sparse indices of static Jacobian when mfs > 0
2023-01-19 10:03:37 +01:00
Sébastien Villemot
7db02b23e9
Block decomposition: fix sparse indices of static Jacobian when mfs > 0
2023-01-17 19:04:21 +01:00
Sébastien Villemot
9013a5cb1b
No longer create +<basename>/+block/ folder (now empty)
2023-01-17 18:42:40 +01:00
Sébastien Villemot
f45a99fc68
Correctly propagate “mfs” and “cutoff” to the static model
...
Those two settings were previously always at their default value for the static
model, independently of what the user would set in the .mod file.
2023-01-17 16:38:03 +01:00
Sébastien Villemot
fe503d3eab
Remove confusing comment
2023-01-17 16:37:24 +01:00
Sébastien Villemot
4bba274f39
Block decomposition: drop unused max lead/lag fields
...
Note that DynamicModel::determineBlockDerivativesType(), it’s legitimate to
replace max_{lead,lag} by max_endo_{lead,lag}, because for exogenous
lag=lead=0, and we no longer compute derivatives w.r.t. to endogenous that do
not belong to the block (so-called “other” endogenous).
2023-01-17 14:42:29 +01:00
Sébastien Villemot
2e09df90e7
Bytecode w/ block decomposition: no longer output derivatives w.r.t. exogenous and endogenous outside the block
2023-01-17 14:23:40 +01:00
Sébastien Villemot
1e377f061a
Block decomposition: drop unused structure fields
2023-01-17 14:18:41 +01:00
Sébastien Villemot
bbdbd0807b
Sparse representation: Octave compatibility fix
...
Octave does not support “private” subdir inside plus folders (“+namespace”).
See https://savannah.gnu.org/bugs/?45444
2023-01-16 17:12:10 +01:00
Sébastien Villemot
8ebd9a9496
Drop the “Sigma_e” statement
2023-01-16 15:08:23 +01:00
Sébastien Villemot
a7b0a324c9
Drop the “periods” statement
2023-01-16 15:02:50 +01:00
Sébastien Villemot
93b9ed6957
Drop the legacy representation of the block-decomposed model
...
As a consequence, and as a temporary measure, always output the
non-block-decomposed legacy representation.
Also drop the block kalman filter output, and drop now useless variables in
M_.block_structure.
2023-01-13 16:57:06 +01:00
Sébastien Villemot
35ac73fad8
Sparse representation: fix various bugs in the non-block MATLAB/Octave output
2023-01-10 15:58:45 +01:00
Sébastien Villemot
e18ecc3fa5
ModFile::remove_directory_with_matlab_lock(): minor performance improvement
...
Use std::filesystem::file_status and cached directory entries information to
avoid extra filesystem operations.
2023-01-10 11:49:39 +01:00
Sébastien Villemot
bae04fa899
ModelTree::findGccOnMacOS() now returns a std::filesystem::path
2023-01-10 11:48:33 +01:00
Sébastien Villemot
a4f299c0b7
Bytecode: change interface of function called from bytecode MEX
2023-01-09 14:09:09 +01:00
Sébastien Villemot
ec3ce156b4
Bytecode: always produce block and non-block versions
...
The block decomposed version is now under <BASENAME>/bytecode/block/.
2023-01-09 13:35:49 +01:00
Stéphane Adjemian (Guts)
4348f4d57f
Provisions for conditional likelihhod estimation.
2023-01-06 12:17:02 +01:00
Sébastien Villemot
0bc1539f45
Drop clang workaround
2023-01-05 18:11:33 +01:00
Sébastien Villemot
cf493ef6a6
Add two missing checks for file opening failures
2023-01-05 17:21:30 +01:00
Sébastien Villemot
253fbbe7d6
Use std::filesystem::path in more places
2023-01-05 17:21:28 +01:00
Sébastien Villemot
d36eb82b7c
Macro processor: removed unused “basename” variable
2023-01-05 15:49:36 +01:00
Sébastien Villemot
1f3ff760e1
EquationTags: drop useless method
2023-01-04 19:27:01 +01:00
Sébastien Villemot
3927862d23
EquationTags: misc implementation improvements
2023-01-04 17:15:51 +01:00
Sébastien Villemot
9658d82cc6
EquationTags::getEqnByTag() now returns an optional<int> instead of throwing
2023-01-04 16:45:12 +01:00
Sébastien Villemot
e2c72a1b75
Drop ModelTree::getEquationTags(), and replace it by calls to better interfaces
2023-01-04 16:20:50 +01:00
Sébastien Villemot
bdb5d37dec
EquationTags::getTagValueByEqnAndKey() now return an optional<string>
...
By the way, optimize the implementation.
2023-01-04 16:03:49 +01:00
Sébastien Villemot
422cbf5736
EquationTags: remove unused function
2023-01-04 16:03:45 +01:00
Sébastien Villemot
df3a153356
Simplify residuals output (MATLAB/Octave and C) by dropping lhs/rhs temporary variables
2023-01-04 14:49:07 +01:00
Sébastien Villemot
9f5ea9467d
Merge branch 'dynamic_model_info' into 'master'
...
Add dynamic option to model_info
See merge request Dynare/preprocessor!74
2023-01-04 09:57:18 +00:00
Johannes Pfeifer
2fd0681151
Add block_dynamic option to model_info
...
Also renames the old static option
2023-01-03 16:06:25 +01:00
Sébastien Villemot
21fcfa7758
use_dll: fixes to parallel compilation
...
— No longer call std::exit() from threads when compilation fails, that function
is marked as not thread-safe under GNU/Linux; and it leads to deadlocks under
Windows. Rather store the list of failed objects, and exit with a message and
an error code from the main thread when that list is not empty at the end of
preprocessing.
– Fix the condition used for waiting until all compilation threads finish;
checking that the queue is empty is not enough, since a compilation may be
ongoing. So also track objects whose compilation is ongoing.
2022-12-20 16:52:47 +01:00
Sébastien Villemot
f349e22f4c
Macro processor: fix error message when @#include is used with nonexistent file
2022-12-14 15:22:20 +01:00
Sébastien Villemot
50a2737e41
Macro processor: fix tracking of line numbers after @#define, @#include and @#includepath directives
...
Closes : #108
2022-12-14 15:22:07 +01:00
Sébastien Villemot
8734bc5ca6
Allow LOG_* auxiliary variables in various commands
...
Closes : #107
2022-12-14 12:42:55 +01:00
Sébastien Villemot
a234176d3c
Julia: do not rewrite derivatives w.r.t. parameters files when unmodified
...
Closes : #105
2022-12-14 12:35:50 +01:00
Sébastien Villemot
a5eac0260a
JSON: fix output of date options
...
They were not enclosed within quotes.
Ref. dynare#1875
2022-12-14 12:16:04 +01:00
Sébastien Villemot
2758f46c83
Fix indexing in M_.endo_trends
...
It would use 0-based indexing, instead of 1-based.
Ref. dynare#1648
Closes : #109
2022-12-14 12:05:12 +01:00
Sébastien Villemot
8cb3437d2d
Minor simplification in static block decomposition driver output
2022-12-12 14:57:50 +01:00
Sébastien Villemot
4aa1ff1f73
Sparse representation: fix bug in output of indices in driver and JSON files
...
Jacobian column numbers were incorrect (it would return internal derivation
IDs).
Ref. dynare#1859
2022-12-12 14:57:49 +01:00
Sébastien Villemot
4f7794a8f9
Sparse representation: compatibility fix with MATLAB < R2020a
...
For those older MATLABs, the “sparse” function does not accept vectors of
integer data type as indices.
Ref. dynare#1875
2022-12-08 14:35:23 +01:00
Sébastien Villemot
83bfc792af
Sparse representation: fix bug in output of indices in driver and JSON files
...
It would previously forget to write the indices for the highest derivation
order (e.g. if order=3, then it would only write sparce indices up to 2nd
order).
Ref. dynare#1859
2022-12-07 16:10:03 +01:00
Johannes Pfeifer
9b015a6a10
Add new mh_init_scale_factor-option
2022-12-01 15:23:37 +01:00
Sébastien Villemot
c48248fc0d
Implement time-recursive block decomposition tuned for purely backward/forward/static models
...
Such a decomposition has to be simulated with periods as the outer loop and
blocks as the inner loop.
It is enabled by default for purely backward/forward/static models, as long as
the “block” option is not given. In that case, “mfs” is also set to 3 by
default (until that value becomes the global default).
M_.time_recursive_block_decomposition is set to “true” when that decomposition
has been performed, “false” otherwise for the traditional decomposition (the
latter has to be simulated with blocks as the outer loop and periods as the
inner loop).
2022-11-30 14:43:44 +01:00
Sébastien Villemot
bb3475d548
Remove call to setup_solvers.m
...
It is no longer used in the new implementation of solve_algo={12,14}.
However, the M_.lhs field that was created by setup_solvers.m is used from
other places, so reimplement it at the preprocessor level.
2022-11-30 14:43:44 +01:00
Sébastien Villemot
ff296023a9
Block decomposition: ModelTree::block_decomposed field was not properly set on copy/move
2022-11-29 15:27:12 +01:00
Sébastien Villemot
53add0b2fe
Block decomposition: when falling back to symbolic normalization, use contemporaneous symbolic Jacobian
...
Previously, it would use a symbolic Jacobian where leads and lags were also
taken into account.
2022-11-28 13:40:49 +01:00
Johannes Pfeifer
56c62197d0
DynareBison.yy: add nobs and heteroskedastic_filter options to calib_smoother
2022-11-23 13:46:53 +01:00
Sébastien Villemot
e01c748c7e
Julia: fix prototype of function computing dynamic derivatives w.r.t. parameters
2022-11-22 11:19:58 +01:00
MichelJuillard
cf4e2194b7
Julia: remove module for derivatives w.r.t. parameters
2022-11-22 10:18:11 +00:00
Sébastien Villemot
2e171e28de
New files for helping a user to debug their model
...
The files are created under <basename>/+debug/dynamic_resid.m and
<basename>/+debug/static_resid.m.
Their purpose is to evaluate separately the LHS and RHS of each equation.
2022-11-16 11:18:09 +01:00
Sébastien Villemot
4807a6c880
use_dll: fix race condition with compilation of power_deriv.{c,h}
2022-11-14 13:45:15 +01:00
Sébastien Villemot
23b0c12d8e
Performance improvement of chain rule derivation, using caching
...
Useful for mfs > 0 on large models.
2022-11-08 12:34:05 +01:00
Sébastien Villemot
dbc2851606
Merge branch 'max_check_ahead_periods' of git.dynare.org:JohannesPfeifer/preprocessor
...
Ref. !69
2022-11-07 16:32:10 +01:00
Johannes Pfeifer
ed95a2ca2d
OccBin: add interface for max_check_ahead_periods option
...
Related to 2f23604824
2022-11-04 23:11:59 +01:00
Sébastien Villemot
1430ab9cc2
Implement new sparse model representation in C
...
Ref. dynare#1859
2022-11-04 14:23:29 +01:00
Sébastien Villemot
836351565d
Fix segfault of notmpterms option with block decomposition
...
By the way, ensure that temporary terms associated to external functions are
not removed, since they are not optional.
2022-11-04 14:23:29 +01:00
Sébastien Villemot
4ab3e937ea
Implement new sparse model representation in MATLAB/Octave
...
Ref. dynare#1859
2022-11-04 14:23:29 +01:00
Sébastien Villemot
2a8e26310d
Block decomposition: fix computation of recursive variables with mfs>0
...
Within a block, if mfs>0, the recursive variables would not appear in recursive
order. This could lead to wrong results in case of dependency relationships
between recursive variables.
2022-11-04 14:23:29 +01:00
Sébastien Villemot
47290087f6
Provisions for new sparse representation of block-decomposed dynamic/static files
...
The stochastic mode in currently unsupported.
This commit adds new fields in M_.
This is a preliminary step for dynare#1859.
2022-11-04 14:23:29 +01:00
Sébastien Villemot
1ed72f6da2
Write block decomposition information in M_ independently of “block” option
...
This is now possible since the block decomposition is always computed. Of
course, the information is not printed if the decomposition failed.
2022-11-04 14:23:29 +01:00
Sébastien Villemot
00fd9dadb6
Julia: no longer write the main dynamic/static files in legacy representation
2022-11-02 15:51:26 +01:00
Sébastien Villemot
6aca84bfbb
Julia: move all generated files to the <basename>/model/julia/ subdirectory
2022-11-02 15:49:57 +01:00
MichelJuillard
6af8a57f9f
replace Julia modules by simple functions
2022-11-02 15:49:56 +01:00
Sébastien Villemot
762243c705
Julia: drop get_power_deriv function from module
...
The function is now provided separately by Dynare.jl.
2022-11-02 15:49:56 +01:00
Sébastien Villemot
4ae6df494d
JSON: add dynamic_tmp_nbr and static_tmp_nbr
...
As a consequence, remove the “tmp_nbr” variable from the Julia modules, since
it is now redundant.
2022-11-02 15:49:56 +01:00
Sébastien Villemot
723fc4139b
Implement new sparse model representation in Julia
...
Ref. dynare#1859
2022-11-02 15:49:56 +01:00
Sébastien Villemot
0278c8577c
Provisions for new sparse representation of dynamic/static files
...
The new representation is only supported for MATLAB/Octave, C and Julia output
for the time being. Bytecode and JSON are unsupported.
This commit adds new fields in M_.
This is a preliminary step for dynare#1859.
2022-11-02 15:49:56 +01:00
Sébastien Villemot
30853e7360
Block decomposition: improve debugging information for normalization
...
– print the information only for the final matching (and not the intermediary
ones that may have failed);
– print the equation name next to its number.
2022-11-02 15:49:56 +01:00
Sébastien Villemot
627dd92c64
Block decomposition: bugfix with temporary terms when mfs=3
...
In an “evaluate” block, the LHS of a renormalized equation (such as “log(x)=…”)
could be associated to a temporary term that would then be incorrectly
computed: that temporary term would be evaluated *before* (and not after) the
evaluation of the associated variable (“x” in the example).
2022-10-26 17:33:26 +02:00
Johannes Pfeifer
d5cf07fadd
Occbin: implement simul_reset_check_ahead_period-option
...
Related to dynare@3765ef77 (dynare!2094)
2022-10-24 10:30:45 +02:00
Sébastien Villemot
219c8d2a47
Do not error out in stochastic mode if mfs > 0 but “block” option not passed
...
In that case, the block-DR routines will not be called.
2022-10-18 17:39:14 +02:00
Sébastien Villemot
5a6e276750
Fix comment
2022-10-18 17:39:14 +02:00
Sébastien Villemot
79c8fe61b1
Fix typo
2022-10-18 17:39:14 +02:00
Sébastien Villemot
a31ef6069c
Correctly handle diff operator in equation renormalization
...
Should have no impact though, since diff nodes are already substituted out at
that point. But it’s better to implement it properly, in case we change the
substitution rules later.
By the way, make the computeSubExprContainingVariable method protected.
2022-10-18 17:39:14 +02:00
Sébastien Villemot
9f96db89ba
use_dll: ensure proper cleanup of thread workers threads in case of early exit (e.g. upon failure)
2022-10-17 14:03:27 +02:00
Sébastien Villemot
781e10c24b
Error out if “use_dll” is specified in Julia mode
2022-10-14 15:40:09 +02:00
Sébastien Villemot
fd9902e87b
use_dll: rewrite the parallel compilation engine with a fixed number of threads
...
The previous system would spawn as many threads as there are object files to be
compiled (which could lead to hundreds of threads for large block-decomposed
models). This could pose a memory usage problem (even when not just waiting,
threads require memory for their own stack).
2022-10-14 15:33:52 +02:00
Sébastien Villemot
e801f1a862
Fix typo
...
[skip ci]
2022-10-11 18:15:11 +02:00
Sébastien Villemot
39051aeb30
Make the hack for MATLAB+Windows directory lock work with any recursive directory structure
...
This simplifes the treatment of the new sparse representation, which creates
several subdirectories in the “+” package folder.
2022-10-11 17:26:47 +02:00
Sébastien Villemot
93054cf692
Various filesystem refactorings
...
– DataTree::packageDir() now takes a std::string_view, returns a
std::filesystem::path, and no longer creates that directory
– DataTree::writeToFileIfModified() now takes a std::filesystem::path as
argument
– Do not call DataTree::writeToFileIfModified() for generating MATLAB/Octave
files, since it does not work (the directory inside which the file is written
has been deleted by the preprocessor just before)
– Consistently use DataTree::packageDir() everywhere (for compatibility with
planner_objective)
2022-10-11 16:28:17 +02:00
Sébastien Villemot
198ff70bce
Simplify strsplit() using std::string_view
...
By the way:
– improve the semantics by having a consistent treatment of empty substring
components (previously, only the last one was ignored)
– move it to DataTree to make it more accessible from elsewhere (even though
ideally it should be in a “utilities” namespace).
2022-10-11 16:23:11 +02:00
Sébastien Villemot
2fb9aa2a60
Minor simplification using argument dependent lookup (ADL)
2022-10-11 11:31:18 +02:00
Sébastien Villemot
5b400b69f0
Use std::filesystem::path::string() when writing paths to std::cout/std::cerr
...
Otherwise they will be quoted, which is not desirable, especially under
Windows (backslashes will be duplicated).
2022-10-11 11:31:15 +02:00
Sébastien Villemot
e0b2583ff9
Streamline informative messages
2022-10-07 18:04:18 +02:00
Sébastien Villemot
3dd40c6c42
use_dll: split generated C file into smaller files that will be compiled in parallel
...
By the way, factorize the code between the dynamic and static versions.
Ref. #41
2022-10-07 18:04:18 +02:00
Sébastien Villemot
dd66459e5f
use_dll: parallelize compilation of multiple object files within single MEX file
...
In particular, it implements dependency tracking in the thread scheduler, so
that multiple MEX files can share object files.
Ref. #41
2022-10-07 18:04:17 +02:00
Sébastien Villemot
5cf4729ab0
use_dll: dynamically limit the number of concurrently running GCC processes to the number of available logical processors
...
Ref. #41
2022-10-07 18:04:17 +02:00
Sébastien Villemot
49a530a775
use_dll: allow more flexible output directory in interface of ModelTree::compileMEX()
2022-10-07 18:04:17 +02:00
Sébastien Villemot
d9bda244d4
use_dll: refactor MEX compilation so that it happens inside “write” methods
2022-10-07 18:04:17 +02:00
Sébastien Villemot
08a86b67cb
Drop logic for selecting whether to compute derivatives w.r.t. exogenous
...
We now always compute those derivatives, so no need for an alternate codepath.
2022-10-07 18:04:17 +02:00
Sébastien Villemot
8cac64c1cb
use_dll: fix bug where operator abs() within a .mod file would return an incorrect result
...
It would compute the *integer* part of the absolute value (calling “abs”
instead of “fabs” from the C source).
2022-10-07 18:04:00 +02:00
Sébastien Villemot
5c33051990
Use std::string_view in a few places where it makes sense
2022-10-04 16:47:16 +02:00
Sébastien Villemot
4c58451d83
Factorize computing pass for block decomposition
...
Also add “block_decomposed” data member for tracking whether the block
decomposition has been successful.
2022-10-04 16:00:30 +02:00
Sébastien Villemot
6e69eea3cf
Minor tightening of access specifiers
2022-10-04 16:00:30 +02:00
Sébastien Villemot
f6053df754
use_dll: compile MEX files in parallel
...
Currently two threads are used (one for the dynamic MEX, one for the static
MEX). When the sparse representation is implemented, four threads will be used.
Closes : #41
2022-10-04 16:00:30 +02:00
Sébastien Villemot
36fcbf6cfe
Functions that write C files now return the paths to the generated files
...
This avoids computing those paths two times (the second time when compiling them).
2022-10-04 16:00:30 +02:00
Sébastien Villemot
895a866bb3
Optimization: use move semantics in more places
2022-10-04 16:00:30 +02:00
Sébastien Villemot
6ed033f202
Bugfix: “relative_irf” option passed to “irf_calibration” was also passed to next command
2022-10-04 16:00:30 +02:00
Sébastien Villemot
3d9ac26aa6
Remove all instances of the “map.find(key)->second” pattern
...
This is unsafe since the find() method can return a past-the-end iterator,
which should be tested for.
Replace most instances by calls to the std::map::at() method (which throws if
the key is unknown), and which is incidentally more readable.
2022-09-27 12:56:16 +02:00
Sébastien Villemot
18037fd29a
Drop code for supporting temporary terms corresponding to model-local variables
...
Since model-local variables are now substituted out of the model at an early
stage (see cfb41d291c
), such temporary terms are
no longer generated.
2022-09-26 17:34:20 +02:00
Sébastien Villemot
64157d9083
Fix bug in ModelTree::writeParamsDerivativesFileHelper()
...
Elements of params_derivatives could be accessed without them being defined,
thus causing illegal memory read.
Ensure that these elements always exist. By the way, use std::map::at() instead
of std::map::find() to trigger an exception instead of an illegal memory read
in that case.
2022-09-26 17:17:47 +02:00
Sébastien Villemot
b403cef871
Put driver output of static block decomposition in a separate function
...
For symmetry with the dynamic case, and for avoiding a call to “return” in the
middle of StaticModel::writeDriverOutput().
2022-09-21 18:48:35 +02:00
Sébastien Villemot
5b12354dc3
Minor performance improvement in copy constructors/assignments of ModelTree and DynamicModel
2022-09-21 17:37:02 +02:00
Sébastien Villemot
98d4f922ca
Cosmetics
2022-09-20 15:29:19 +02:00
Sébastien Villemot
7f1b4fcc20
Refactor OptionsList class
...
In particular, use a std::variant to store the values of options. This ensures
that a given option name can have only one value (previously, for a given
option name, it was possible to store several values as long as they were of
different types).
2022-09-20 11:56:43 +02:00
Sébastien Villemot
e4449f1c4a
Add comment for special token name for “domain” keyword
2022-09-20 11:56:43 +02:00
Sébastien Villemot
8dcdcf1fd4
Fix check of “domain” option of new estimation prior syntax
2022-09-20 11:56:42 +02:00
Sébastien Villemot
3f674c1af9
Fix bug with “graph_format” option of “identification” and “dynare_sensitivity”
...
The local value of option was not copied to the top-level “options_” structure,
as it is done for “nograph” and “nodisplay”.
2022-09-20 11:56:42 +02:00
Sébastien Villemot
1088cc4242
Improve informative messages about derivatives and block decomposition
...
When computing the derivatives or block decomposition of the planner objective,
the epilogue or the original Ramsey model, the preprocessor would talk about
dynamic/static model, which was confusing. It now uses the right terminology.
2022-09-14 17:51:36 +02:00
Sébastien Villemot
d67f569035
Always compute block decomposition, even if “block” option was not passed
...
If block decomposition fails, error out if “block” option was passed, but not
otherwise.
This commit does not modify the generated files.
This is a preliminary step for dynare#1859.
2022-09-13 16:16:00 +02:00
Sébastien Villemot
1aead92cd5
Fix bug in block derivatives w.r.t. exogenous deterministic
2022-09-12 17:38:47 +02:00
Sébastien Villemot
0b5e686c8c
Turn ramsey_FOC_equations_dynamic_model into a local variable instead of a data member
2022-09-09 17:13:21 +02:00
Sébastien Villemot
2fdc8b682e
Merge branch 'BGP_space' into 'master'
...
Add missing whitespace in output of BGP warning
See merge request Dynare/preprocessor!65
2022-09-06 10:11:51 +00:00
Sébastien Villemot
482ec5fb67
macOS: bump to GCC 12 (for compilation and for use_dll)
2022-09-06 11:53:40 +02:00
Johannes Pfeifer
da5b36704d
Add missing whitespace in output of BGP warning
2022-08-03 10:52:08 +02:00
Sébastien Villemot
fc4c9a73c9
Fix comment
...
[skip ci]
2022-07-27 16:50:08 +02:00
Sébastien Villemot
c3cb7ca534
Bytecode: simplify type for storing list of instructions
...
Incidentally, make BytecodeInstruction an immutable struct, to facilitate
access to opcode in such a list.
2022-07-26 18:26:37 +02:00
Sébastien Villemot
613e0da782
Bytecode: add some comments to FNUMEXPR_
...
[skip ci]
2022-07-26 14:52:10 +02:00
Sébastien Villemot
21cecee599
Add “fsolve_options” option to “steady” command
...
Ref. dynare#1856
2022-07-22 13:43:41 +02:00
Sébastien Villemot
ad40f1365c
Block decomposition: code factorization
2022-07-21 18:20:35 +02:00
Sébastien Villemot
d4c453c422
Block decomposition: (likely) performance improvement in static file in relation to temp terms
...
Compute temporary terms for derivatives of “evaluate” mode, even though those
derivatives are not computed. This is because the temporary terms may be useful
for subsequent blocks.
By the way, add an explanatory comment for the equivalent code in dynamic file.
2022-07-21 17:31:48 +02:00
Sébastien Villemot
a97a41f6c0
Bugfix with temporary terms in block+bytecode
...
There were actually two distinct bugs, leading to incorrect results in some
corner cases:
– in the “evaluate” mode of the bytecode MEX, the temporary terms of the
derivatives “evaluate” blocks were not evaluated at runtime; but these
temporary terms may be needed for residuals of subsequent blocks;
– when the bytecode MEX was only computing residuals of the model (and not 1st
order derivatives), the temporary terms of the derivatives were not evaluated
at runtime; but these temporary terms may be needed for residuals of subsequent
blocks.
2022-07-21 17:22:08 +02:00
Sébastien Villemot
1401c85d6a
Bytecode: drop FCUML instruction
...
It’s redundant with FBINARY{BinaryOpcode::plus}.
2022-07-20 16:02:24 +02:00
Sébastien Villemot
a58109d094
Bytecode: refactor methods for writing .cod and .bin files in the block decomposition case
2022-07-20 16:02:24 +02:00
Sébastien Villemot
d598810329
Bytecode: minor simplification using syntax of sizeof operator without parentheses
2022-07-20 14:48:30 +02:00
Sébastien Villemot
50d5b916e2
Remove constructor and accessors for AuxVarInfo
...
Rather make all data members public and const, and use aggregate-initialization.
2022-07-20 14:48:30 +02:00
Sébastien Villemot
f0629555a5
Remove useless constructors (aggregate initialization is enough for those)
...
By the way, turn those classes into structs since all their members are public.
2022-07-20 14:48:28 +02:00
Sébastien Villemot
83a94aca57
Replace most uses of std::string::compare() by operator==(), for clarity
2022-07-20 11:18:20 +02:00
Sébastien Villemot
c0bfc99946
Minor simplification using std::vector::emplace_back()
2022-07-20 11:18:07 +02:00
Sébastien Villemot
435e56369c
Compatibility fixes with GCC 12
2022-07-16 12:46:16 +02:00
Sébastien Villemot
35dc7fcd81
Bytecode: fix treatment of temporary terms (in non-block mode)
...
The “temporary_terms_union.insert(it)” statement introduced in the previous
commit was in the wrong block.
By the way, replace the “switch” by an “if constexpr”.
2022-07-14 09:17:11 +02:00
Sébastien Villemot
ae150d2b1f
Bytecode: refactor routines for creating .cod file in non-block mode
2022-07-13 18:51:01 +02:00
Sébastien Villemot
89debf429a
Factorize code for writing JSON output
2022-07-12 18:04:05 +02:00
Sébastien Villemot
6da24fc763
Fix bug in JSON output for dynamic derivatives w.r.t. parameters
...
Variable and parameter indices were wrong (offset by 1).
2022-07-12 17:45:00 +02:00
Sébastien Villemot
9e6c01f132
Streamline some function names
2022-07-12 17:04:41 +02:00
Sébastien Villemot
a541d23055
Minor simplification
2022-07-12 16:39:17 +02:00
Sébastien Villemot
157c67e04b
New helpers to simplify common operations with derivation IDs
2022-07-12 16:30:45 +02:00
Sébastien Villemot
2013056a2c
Fix bug in JSON output for derivatives w.r.t. parameters
...
Confusion between a symbol ID and a derivation ID, which could lead to invalid
output or crash.
2022-07-12 16:23:44 +02:00
Sébastien Villemot
440173f2bc
Further simplification made possible by 75e453c5fe53ce9ce82e564577db073b41a0459a
2022-07-12 16:23:40 +02:00
Sébastien Villemot
7fd78606ae
Fix bug in MATLAB/Octave output introduced in 3e1f9dbb82
2022-07-12 16:23:32 +02:00
Sébastien Villemot
1d71386f01
Further templating of helpers for writing output files
...
So that more stuff is computed at compile-time (using constexpr features).
2022-07-12 16:23:28 +02:00
Sébastien Villemot
4370b76ce4
Remove unused function
2022-07-12 16:18:19 +02:00
Sébastien Villemot
9c3eeb7c8d
Refactor code for writing derivatives w.r.t. parameters
2022-07-12 16:18:16 +02:00
Sébastien Villemot
8da663a110
Further factorization in methods for writing static and dynamic files
2022-07-12 16:05:15 +02:00
MichelJuillard
3e1f9dbb82
use @inbounds blocks instead of @inbounds for each line
2022-07-12 13:07:33 +02:00
MichelJuillard
a4556896db
Julia functions Float64 -> <: Real
2022-07-12 11:15:51 +02:00
Sébastien Villemot
5174c3b52c
Minor simplification
2022-07-11 22:30:50 +02:00
Sébastien Villemot
f38c8278ae
Refactor methods for writing static and dynamic files
...
– factorize common code between the static and the dynamic version
– reorganise language-specific code into dedicated functions
– use a function template in the main helper to do some computations
at compile-time (using constexpr features)
2022-07-11 22:29:28 +02:00
Sébastien Villemot
c8b046ec86
Simplification using non-default std::ofstream constructor
2022-07-11 22:17:36 +02:00
Sébastien Villemot
92047f547e
Minor simplification
2022-07-11 14:05:29 +02:00
Sébastien Villemot
9b34fe856f
Add missing “break” for consistency
2022-07-08 16:10:23 +02:00
Sébastien Villemot
4b30342dc2
Bytecode: various simplifications
...
Also improve the naming of the enum class used for identifying the type of
external function call.
2022-07-08 16:02:49 +02:00
Sébastien Villemot
a7dc96516b
Minor cleanup
2022-07-08 15:13:21 +02:00
Sébastien Villemot
69354e0aec
More C++20 modernization
2022-07-08 14:52:21 +02:00
Sébastien Villemot
4867120757
Remove unused function
2022-07-08 14:44:01 +02:00
Sébastien Villemot
6d2d73a5d7
Bytecode: refactor output methods around an enum class similar to ExprNodeOutputType
...
By the way, add assertions to ensure that assignment LHS output type is only
used on VariableNode(s) and AbstractExternalFunctionNode(s).
2022-07-06 16:46:40 +02:00
Sébastien Villemot
93ef4c6feb
Small simplification
2022-07-05 17:08:29 +02:00
Sébastien Villemot
3d21821d0c
JSON output: remove duplicate “rhs” field when RHS of equation is non-zero constant
2022-07-05 17:08:29 +02:00
Sébastien Villemot
c27342cfeb
Fix interaction of temporary terms with steady_state operator
...
When the same complex expression appears outside and inside a steady_state()
operator, the same temporary term would be used for both cases, which was
obviously wrong.
The fix consists in never substituting temporary terms for expressions inside
the steady_state operator().
Incidentally, this implies that external functions can no longer be used inside
steady_state operators (since their computed values are stored inside temporary
terms).
2022-07-05 17:08:27 +02:00
Sébastien Villemot
db0d9290b5
Bytecode: remove hack for exogenous deterministic index
...
The support in the bytecode MEX was broken anyways.
2022-07-05 14:10:34 +02:00
Sébastien Villemot
c27354ace0
Bytecode: change name of 2nd argument of ExprNode::writeBytecodeOutput(), for clarity
2022-07-04 17:10:44 +02:00
Johannes Pfeifer
99337ee32e
dyn_forecast: remove unused output argument
2022-07-01 14:31:42 +02:00
Sébastien Villemot
c3fc5b1dd7
Enable -Wunused-parameter
...
As a consequence, add many [[maybe_unused]] attributes for legitimate
cases (mainly in virtual functions).
2022-06-24 17:11:48 +02:00
Sébastien Villemot
a6b5d40d4b
Pac{Expectation,TargetNonstationary}Node::writeOutput(): error out for non-LaTeX, as for VarExpectationNode
2022-06-24 17:11:48 +02:00
Sébastien Villemot
297f86a90e
NumConstNode::write{Bytecode,Json}Output(): check for temporary terms, as is done for MATLAB output
2022-06-24 17:11:48 +02:00
Sébastien Villemot
17f72d6162
Remove empty checkPass() methods
2022-06-24 17:11:48 +02:00
Sébastien Villemot
3b99ac5df0
Remove unused parameters to various methods
2022-06-24 17:11:38 +02:00
Sébastien Villemot
e0c9a287c5
Remove unused StaticModel::copyHelper()
2022-06-24 15:28:42 +02:00
Sébastien Villemot
b390390a98
Remove unnecessary inline specifiers
...
A function defined entirely inside a class/struct/union definition is
implicitly an inline function.
2022-06-24 15:09:08 +02:00
Sébastien Villemot
b307097f85
Mark some functions as constexpr
...
This probably brings no benefit since those functions are currently not used at
compile time, but it’s nice…
2022-06-24 14:52:39 +02:00
Sébastien Villemot
7e01d01d80
VariableNode::writeBytecodeOutput(): check for temporary terms, as done for other types of output
2022-06-24 13:10:23 +02:00
Sébastien Villemot
9bd2973034
Refactor bytecode output around a new BytecodeWriter class and operator<< overloads
2022-06-24 13:10:04 +02:00
Sébastien Villemot
13dc0a1144
Use operator""s to replace some calls to std::string constructor
...
By the way, remove other unnecessary calls to that constructor.
2022-06-22 12:47:11 +02:00
Sébastien Villemot
83693e4427
Bytecode: stop using unsigned integers where signed ones avoid unnecessary casts
2022-06-20 17:49:31 +02:00
Sébastien Villemot
5cd5676c8e
Bytecode: directly use several enums inside instruction classes
2022-06-20 15:19:08 +02:00
Sébastien Villemot
4662a42c9a
Bytecode: in FNUMEXPR, store lag as int rather than int8_t
...
Otherwise lags are truncated at ±128.
2022-06-20 15:19:08 +02:00
Sébastien Villemot
b1c8e24e01
Bytecode: store instruction opcode (Tags enum) directly inside instruction classes
...
This makes the code simpler. Incidentally, since Tags are no longer stored as
uint8_t, this makes the .cod files larger, but there is no clear performance impact.
2022-06-20 15:18:23 +02:00
Sébastien Villemot
09cb33d867
Bytecode: no longer bypass normal alignment rules in instructions representation
...
This change provides a (limited) performance gain, at the expense of
a (moderate) increase in .cod files.
2022-06-20 10:28:30 +02:00
Sébastien Villemot
2ea6a5244e
Bytecode: remove unused expression types and associated constructors
2022-06-17 16:31:47 +02:00
Sébastien Villemot
3613dbbe01
Bytecode: remove unused instruction class constructors
2022-06-17 16:10:17 +02:00
Sébastien Villemot
aa4783fd86
Bytecode: move all instruction classes into a single class hierarchy
...
Class BytecodeInstruction is the root.
2022-06-17 15:33:54 +02:00