Commit Graph

676 Commits (97fa005b3341f8b92392d407337083f3fde32b73)

Author SHA1 Message Date
Houtan Bastani 3ec01b8612
modifications for compiling mex on macOS
* only support 64 bit mex
* check whether local compiler exists; if not use system compiler; if that doesn't exist stop processing
* move to minimum macOS 10.9, corresponding to the MATLAB mex min
2019-11-22 16:36:01 +01:00
Houtan Bastani c6beb6c5c6
macro processor: ignore `@#line` directive 2019-11-22 14:14:05 +01:00
Sébastien Villemot 5a5817b4fe
Improvements to the test for balanced growth path
— Raise the default tolerance for cross-derivatives to 1e-6, to reduce the
  number of false positives

— New option “balanced_growth_test_tol” to the “model” block for changing that
  tolerance

— Turn back test failures into errors. Since there is now an option for
  controlling the tolerance, the user always has the possibility of making the
  test pass.

Closes: dynare#1389
2019-11-14 17:55:17 +01:00
Houtan Bastani 0f0299bc1c
fix to allow for diffs of unary ops to go through variable mapping 2019-11-07 16:15:49 -05:00
Houtan Bastani 0bb233d291
fix bug causing auxiliary variables for pac growth parameters not to contain their original symbol id 2019-11-07 14:17:49 -05:00
Dóra Kocsis 7a78593df4 introduce variableMapping, default equation name tags in M_ and JSON output 2019-10-30 16:30:51 +01:00
Houtan Bastani fa9c9435ff
add xref for equation tags 2019-10-29 14:05:55 +01:00
Houtan Bastani ef4710cdb1
macro processor: fix for loops 2019-10-29 11:21:09 +01:00
Houtan Bastani 8a789d060f
aesthetic fix: for conformity to the rest of the code, prefer `const auto` to `auto const` 2019-10-29 11:20:27 +01:00
Houtan Bastani 4866bb5902
macro processor: use C++17 structured bindings in for loops 2019-10-29 11:20:21 +01:00
Houtan Bastani 217dadabbd
Use `if` statements with initializers allowed by C++17 2019-10-29 11:20:13 +01:00
Houtan Bastani 361e99bee5
simplify code 2019-10-28 17:25:40 +01:00
Houtan Bastani 7b13ee1b3a
macro processor: remove unused variable 2019-10-24 17:52:32 +02:00
Sébastien Villemot d839aea08b
Drop unused functions for writing C and C++ output
These functions should have been deleted in
946d105c04.
2019-10-24 10:54:46 +02:00
Sébastien Villemot ecdca502aa
Modernization: stop using make_pair() and make_tuple()
In many cases, they can be replaced by the curly braces syntax.

Otherwise, we can now use the pair() and tuple() constructors, without the need
to specify template parameters, thanks to class template argument
deduction (new in C++17).
2019-10-24 10:49:13 +02:00
Sébastien Villemot 2a127b1f23
VAR/TCM models: use lag-equivalence relationship to compute maximum lags
This is made possible by the getLagEquivalenceClass() method introduced in the
previous commit.

Previously, the static version of the LHS expressions was used.

As a consequence, drop ModFile::diff_static_model, now useless.
2019-10-22 16:04:24 +02:00
Sébastien Villemot 8a83e08e79
Fix bug with diff or unary ops that have same static representation
Previously, for testing whether two diff() expressions or two unary ops were
the lead/lag of each other, the preprocessor would test whether they have the
same static representation. This is ok for simple expressions (e.g.
diff(x(-1))), but not for more complex ones (e.g. diff(x-y) and diff(x(-1)-y)
should not be given the same auxiliary variable).

This commit fixes this by properly constructing the equivalence relationship
and choosing a representative within each equivalence class. See the comments
above lag_equivalence_table_t in ExprNode.hh for more details.

Closes #27
2019-10-22 15:01:06 +02:00
Sébastien Villemot c5d223a79b
Fix semantics of ExprNode::maxLag(), maxLead() and maxLagWithDiffsExpanded() with constants
Those methods can return a negative value in some cases. For example,
maxLead(x₋₁) = −1.

But constants were always returning a value of zero, which means that we had
inconsistent behaviour like maxLead(x₋₁ + 2) = 0.

This commits fixes the behaviour by making these methods return the smallest
possible integer when called on constants.
2019-10-22 11:35:11 +02:00
Sébastien Villemot d38ac48cfa
Create set_auxiliary_series routine in use_dll, block/bytecode and julia modes
Closes #34
2019-10-17 15:03:26 +02:00
Houtan Bastani 7306132644
remove unused headers 2019-10-11 11:44:39 +02:00
Houtan Bastani 8211edc4e8
fix typo 2019-10-10 15:31:03 +02:00
Houtan Bastani 9e454debb5
support external functions in MATLAB namespace. closes dynare#1639 2019-10-09 14:49:05 +02:00
Houtan Bastani 4e1b1e4405
fix typo in parser 2019-10-08 15:36:30 +02:00
Houtan Bastani f77413ebb8
remove unused argument to function 2019-10-08 11:22:29 +02:00
Houtan Bastani fac9e4436c
fix bug in `fast` option: printing temporary terms hid changes in model when the temporary term changed as the temporary terms themselves were not printed. closes dynare#1661
Furthermore, modifications to model local variables were not taken into account.

To fix, take checksum of model local variables, temporary terms, and equations

Also, use existing functions to print these to a stringstream instead of repeating print functionality in this function
2019-10-07 18:55:20 +02:00
Houtan Bastani 6e92f79c13
simplify isChecksumMatching, move to filesystem::path 2019-10-07 17:43:45 +02:00
Houtan Bastani 6191c69d74
move to hash algorithm defined since C++11 for calculating checksums. dynare#1661 2019-10-07 17:43:16 +02:00
Houtan Bastani 979453815c
simplify initialization of `hasModelChanged` variable in writing of output 2019-10-07 11:32:02 +02:00
Stéphane Adjemian (Charybdis) 14b6cb6bee Fixed logic for output language. 2019-10-07 09:28:49 +02:00
Houtan Bastani 7b4616e853
fix cross compilation due to bug in MinGW 8.3.0
implicit conversion from `filesystem::path` to `string` not supported even though it's in the standard
2019-10-04 14:41:48 +02:00
Houtan Bastani 1291320053
macro processor: handle empty files 2019-10-04 11:18:03 +02:00
Houtan Bastani 125adff59c
macro processor: insert path instead of string as the path has already been created 2019-10-04 11:10:21 +02:00
Houtan Bastani 2ce6e411b4
remove unused headers 2019-10-04 10:57:36 +02:00
Houtan Bastani 2f6f0d8cf6
use filesystem::path instead of string to hold include paths passed on the command line 2019-10-04 10:57:36 +02:00
Houtan Bastani 0b3cd3ec90
pac: fix parsing of linear combination for growth option 2019-10-03 18:26:09 +02:00
Houtan Bastani 031bc62f3a
macro processor: use filesystem after move to C++17, closes #31
ancillary to this change is the move of `paths` out of the Driver class into an argument to parsing/evaluation #32
2019-10-03 14:24:47 +02:00
Houtan Bastani d7e70a4063
macro processor: fix bug: interpret @#include at node level instead of at the Driver level 2019-10-02 17:39:11 +02:00
Houtan Bastani 310f3936fe
macro processor: fix bug: interpret @#includepath at node level instead of at the Driver level 2019-10-02 17:39:05 +02:00
Houtan Bastani db52e02158
capitalize MATLAB 2019-10-02 14:04:31 +02:00
Houtan Bastani 93077bbcdd
macro processor: fix bug in range when start point == end point 2019-10-02 10:22:46 +02:00
Houtan Bastani 5e54761201
clarify error message in bfcfbac66d. #29 2019-09-30 14:27:58 +02:00
Houtan Bastani bfcfbac66d
change error message when trying to write unused endogenous variable. #29 2019-09-30 14:21:37 +02:00
Houtan Bastani 12bf59ea28
remove unused line. #29 2019-09-30 14:21:37 +02:00
Houtan Bastani e3c23df9b8
fix spacing and typos 2019-09-30 14:21:36 +02:00
Houtan Bastani 6d783ec9cd
add comment 2019-09-30 14:09:49 +02:00
Houtan Bastani 1fcd305015
allow for expressions as upper bound for irf_calibration and moment_calibration. Closes #12 2019-09-30 12:22:59 +02:00
Sébastien Villemot f66e6a7f35
Fix check for unused endos in the presence of PAC model-consistent expectations
Since commit 64f55e4a5e, in the presence of PAC
model-consistent expectations, some endogenous variables are added to the
symbol table at the beginning of ModFile::transformPass(), while their defining
equations are added at a later point.

But commit 7c3f981eac has introduced a check that
verifies that all endogenous are used in equations. That check happens after
the above mentioned endogenous are created, but after their defining equations
are added. Hence it fails.

The fix consists in creating those endogenous after the check. Incidently, they
are no longer part of the saved original model, but this is a good thing.
2019-09-25 12:00:40 +02:00
Houtan Bastani d3db73b7e4
remove unused symbols 2019-09-25 11:36:03 +02:00
Sébastien Villemot b0ac4a4e51
Cosmetic change 2019-09-24 18:47:43 +02:00
Houtan Bastani 92ad5aad2c
Revert "add info about max endo/exo lag by variable. closes dynare#1596"
This reverts commit 7827d2e04d.
2019-09-24 14:03:38 +02:00
Houtan Bastani 047b3b25bb
add print, noprint options to perfect_foresight_solver 2019-09-12 14:35:29 +02:00
Houtan Bastani 04b6a68aef
new calling structure for stoch_simul, discretionary_policy. dynare#1197 2019-09-11 18:05:40 +02:00
Sébastien Villemot bad0c3cf27
Fix preprocessor failure to rename +<model> directory if /tmp is not on the same filesystem
Bug introduced in 0c755460, that manifested on the Gitlab runners.
2019-09-11 17:03:37 +02:00
Sébastien Villemot 2c6fa34a1f
C++17: use structured bindings instead of std::tie whenever possible 2019-09-11 16:40:19 +02:00
Houtan Bastani 9a5ad17349
suppress sign comparison warnings when compiling with g++-9 2019-09-11 16:25:10 +02:00
Houtan Bastani 6a937689d4
ignore warnings from boost headers when compiling with g++-9 2019-09-11 16:25:10 +02:00
Sébastien Villemot 0c755460b1
Use std::filesystem instead of boost::filesystem
Note that there is no equivalent of boost::filesystem::unique_path(), so I
implemented ModFile::unique_path() which does something similar.
2019-09-11 14:47:48 +02:00
Houtan Bastani 0c1373bc5e
stop processing when certain functions are used in a linear context on endogenous/exogenous variables. closes dynare#1537 2019-09-10 12:37:28 +02:00
Houtan Bastani d1be4f4946
remove duplicates from stoch_simul symbol_list. closes dynare#1519 2019-09-10 11:13:33 +02:00
Houtan Bastani 7827d2e04d
add info about max endo/exo lag by variable. closes dynare#1596 2019-09-09 14:29:22 +02:00
Houtan Bastani 7c3f981eac
stop processing if not all endogenous variables are used in the model block. closes #25 2019-09-05 12:19:21 +02:00
Sébastien Villemot fbf535e819
Fix typo 2019-08-27 14:20:00 +02:00
Houtan Bastani 0df8dd3bc2
include header needed to compile 3a21eda40e with g++
#26
2019-08-26 18:17:41 +02:00
Houtan Bastani 3a21eda40e
macro processor: support @#echomacrovars with symbol_list
closes #26
2019-08-26 18:12:04 +02:00
Houtan Bastani 2b3519e3b0
macro processor: add for syntax for shortcut with filtering comprehension
closes #28
2019-08-26 16:08:31 +02:00
Houtan Bastani def99f9dd3
macro processor: simplify parser code 2019-08-26 15:00:53 +02:00
Houtan Bastani d4ad2cbb5e
macro processor: Expression class has to_string function as well, so no need for cast 2019-08-23 12:07:31 +02:00
Houtan Bastani 7f96d4a1c9
macro processor: remove unnecessary check in Function evaluation
Not necessary because of parser rules for function definition
2019-08-23 11:12:36 +02:00
Sébastien Villemot 8cdbdee315
Various cleanups around the “language” option
— allow “language=matlab” for symmetry (this is the default)
— remove the useless “cuda” and “python” values
— give a more meaningful error message when “output” is used in conjunction
  with “language=matlab”
2019-08-22 17:43:34 +02:00
Sébastien Villemot db6d4fb0cd
Support identification(order=3)
In that case, the preprocessor outputs g4 (4th derivatives of model) and
g3p (1st derivs of g3 w.r.t. parameters).

Ref #10
2019-08-22 17:02:40 +02:00
Sébastien Villemot 1491b2d225
Give better names to ostringstream variables storing derivs w.r.t. params. 2019-08-22 17:02:39 +02:00
Houtan Bastani 6ced2aaedb
macro processor: fix bug in array power: disallow reals that are not integers 2019-08-22 15:44:31 +02:00
Houtan Bastani 8da3dc5c6b
macro processor: add noexcept to functions 2019-08-21 18:25:08 +02:00
Houtan Bastani 48466f0e10
macro processor: remove double evaluations of ExpressionPtr 2019-08-21 18:07:40 +02:00
Houtan Bastani 92f18f58f5
macro processor: comment If class 2019-08-21 18:04:09 +02:00
Sébastien Villemot 4594fdd0fd
More comment improvements in relation to diff operator expansion/substitution 2019-08-20 18:22:02 +02:00
Houtan Bastani cfc7a1467b
macro processor: fix error message 2019-08-20 15:21:41 +02:00
Houtan Bastani 6e523aaf28
macro processor: add immutable Range class, making Array immutable 2019-08-20 15:21:41 +02:00
Houtan Bastani 6c72980580
macro processor: replace uses of make_pair 2019-08-20 14:29:44 +02:00
Houtan Bastani 16080f2bb8
macro processor: make Variable class immutable 2019-08-20 11:16:33 +02:00
Houtan Bastani b3ec807b90
macro processor: move changes from `cd99bb3af9c8ef6fd881fa0457121894f8edd14e` to the header file 2019-08-19 18:31:18 +02:00
Sébastien Villemot 9b9c5beb5c
Ensure that unary ops aux vars are never created when there is a lead
The transformation would be incorrect because of the expectation operator.

There was already a safety check, but it was not entirely correct. For example,
if “exp(y)” was appearing before “exp(y(+1))”, the check would not catch the
problem, because it happened after the substitution table had been filled. So
we now do the check before filling that table.
2019-08-19 18:27:57 +02:00
Sébastien Villemot 3941278832
Add more comments in routines for aux vars for unary ops / diff operators
By the way, do some small code simplifications.
2019-08-19 18:27:57 +02:00
Sébastien Villemot 8e9f6e4c57
Improve some function prototypes for better distinction between input and output arguments 2019-08-19 18:27:57 +02:00
Houtan Bastani cd99bb3af9
macro processor: Make @#include and @#includepath immutable 2019-08-19 18:20:53 +02:00
Houtan Bastani b77f6ecd94
macro processor: add `defined` operator 2019-08-19 15:14:51 +02:00
Houtan Bastani 8ebd2a1735
macro processor: support `@#elseif` directive 2019-08-19 15:14:43 +02:00
Sébastien Villemot 75b000a0b5
Macro processor: ensure that all read-accessors return a const reference
Useless copies are thus avoided in some situations.
2019-08-14 17:36:10 +02:00
Sébastien Villemot 8c1e48a09e
Add a few more calls to std::move() 2019-08-14 17:27:31 +02:00
Sébastien Villemot c4f331c74c
Macro processor: make more node classes immutable
Since the node classes are stored and copied as std::shared_ptr, a given class
instance can actually be shared by two different expressions. Hence, in order
to prevent weird bugs, it’s necessary to make these classes immutable.

This commit deals with the easy cases.

The remaining (and more complex) ones are:
— Variable
— Array
— Include
— IncludePath
2019-08-14 17:14:42 +02:00
Sébastien Villemot 46a7cf5db7
Macro processor: fix the use of move semantics in constructor
In particular, remove the const keyword before arguments passed-by-value,
because otherwise they can't be moved (since they are immutable).

Also add a few missing calls to std::move(), and remove some calls to
std::move() when they are useless (on class enums, which are fundamental
types.)
2019-08-14 16:43:45 +02:00
Sébastien Villemot 37e7a6d1c1
Now that we require Bison ≥ 3.2, the stack.hh and position.hh files are no longer generated 2019-08-14 15:36:31 +02:00
Sébastien Villemot b299983a8b
Fix the notmpterms option in the presence of external functions 2019-08-14 15:28:41 +02:00
Sébastien Villemot ecad2dfb10
Avoid running bison and flex multiple times when doing parallel builds 2019-08-14 11:22:33 +02:00
Sébastien Villemot 30aaf93ca7
Bison 3.2 now generates a default semantic action with variants
The minimal required version of Bison is bumped to 3.2, so that we can rely on
those default actions.
2019-08-14 11:22:33 +02:00
Houtan Bastani 2c6a290fb3
remove unnecessary declaration 2019-08-13 13:17:08 -04:00
Houtan Bastani bb13b93d59
aesthetic fix 2019-08-13 12:37:34 -04:00
Sébastien Villemot 5960a9168c
Macro processor: fix the shift/reduce conflict related to ternary colon operator
The idea is to split the expression rule into smaller subrules, hierarchically
organized according to the operator precedence (Bison still does part of the
job of dealing with precedence).
2019-08-13 18:17:14 +02:00
Houtan Bastani 7048a4ff32
macro processor: consolidate precedence rules around unary +/- 2019-08-13 09:56:32 -04:00
Houtan Bastani 0c37da202b
add missing precedence for unary plus 2019-08-13 09:55:41 -04:00