Date: Mon, 11 May 2026 07:15:35 +0000 From: Yuri Victorovich <yuri@FreeBSD.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: git: 106516fff7f1 - main - science/dynare: update 5.=?utf-8?Q?4 =E2=86=92 7.?=0 Message-ID: <6a018217.1f938.68e751bd@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by yuri: URL: https://cgit.FreeBSD.org/ports/commit/?id=106516fff7f11f27be0ed5241e4caf583042b78b commit 106516fff7f11f27be0ed5241e4caf583042b78b Author: Yuri Victorovich <yuri@FreeBSD.org> AuthorDate: 2026-05-11 06:29:11 +0000 Commit: Yuri Victorovich <yuri@FreeBSD.org> CommitDate: 2026-05-11 07:15:17 +0000 science/dynare: update 5.4 → 7.0 --- science/dynare/Makefile | 43 +- science/dynare/distinfo | 6 +- science/dynare/files/example.sh | 9 + .../dynare/files/patch-dynare++_kord_journal.cc | 25 - science/dynare/files/patch-meson.build | 26 + .../dynare/files/patch-mex_build_octave_configure | 88 - .../patch-mex_sources_libkorder_kord_journal.cc | 29 + ...tch-mex_sources_libkorder_utils_thread__pool.cc | 94 + ...iterations_local__state__space__iteration__2.cc | 46 +- .../files/patch-preprocessor_src_DynareMain.cc | 16 + .../files/patch-preprocessor_src_ModelTree.cc | 111 ++ .../files/patch-preprocessor_src_ModelTree.hh | 30 + .../files/patch-preprocessor_src_meson.build | 21 + science/dynare/pkg-plist | 1792 ++++++++++---------- 14 files changed, 1293 insertions(+), 1043 deletions(-) diff --git a/science/dynare/Makefile b/science/dynare/Makefile index 5ea4a77940c6..4b8d1e2aa43a 100644 --- a/science/dynare/Makefile +++ b/science/dynare/Makefile @@ -1,6 +1,5 @@ PORTNAME= dynare -DISTVERSION= 5.4 -PORTREVISION= 16 +DISTVERSION= 7.0 CATEGORIES= science # economics MASTER_SITES= https://www.dynare.org/release/source/ @@ -16,42 +15,26 @@ BROKEN_aarch64= cannot open module file 'ieee_arithmetic.mod' for reading at (1) BROKEN= requires OpenMP support that is missing on this architecture .endif -BUILD_DEPENDS= ${LOCALBASE}/include/boost/tokenizer.hpp:devel/boost-libs -LIB_DEPENDS= libhdf5.so:science/hdf5 \ - libmatio.so:math/matio \ - libopenblas.so:math/openblas \ - libsz.so:science/libaec +BUILD_DEPENDS= ${LOCALBASE}/include/boost/tokenizer.hpp:devel/boost-libs \ + octave:math/octave +LIB_DEPENDS= libopenblas.so:math/openblas \ + libslicot.so:math/slicot \ + libumfpack.so:math/suitesparse-umfpack RUN_DEPENDS= epstool:graphics/epstool \ gnuplot:math/gnuplot \ + octave:math/octave \ + octave-forge-datatypes>0:math/octave-forge-datatypes \ + octave-forge-statistics>0:math/octave-forge-statistics \ pstoedit:graphics/pstoedit \ - xfig:graphics/xfig # README says that these executables are required for the test suite + xfig:graphics/xfig -USES= bison compiler:c++17-lang fortran gmake localbase:ldflags tar:xz tex -USE_TEX= pdftex +USES= bison compiler:c++20-lang fortran localbase:ldflags meson pkgconfig tar:xz -GNU_CONFIGURE= yes -CONFIGURE_ARGS= --disable-matlab \ - --disable-doc - -FCFLAGS+= -fPIC # required because configure tests with -shared +MESON_ARGS= -Dbuild_for=octave \ + -Dpardiso=disabled SUB_FILES= pkg-message -OPTIONS_DEFINE= OCTAVE -OPTIONS_DEFAULT= OCTAVE -OPTIONS_SUB= yes - -OCTAVE_DESC= Integrate with Octave (main way to use Dynare) -OCTAVE_CONFIGURE_ENABLE= octave -OCTAVE_CONFIGURE_ON= --disable-mex-kalman-steady-state # Kalman Steady State MEX file for Octave - requires the non-free library slicot-5.0 -OCTAVE_BUILD_DEPENDS= octave:math/octave -OCTAVE_LIB_DEPENDS= libfftw3.so:math/fftw3 \ - libfftw3f.so:math/fftw3-float \ - libgsl.so:math/gsl \ - libumfpack.so:math/suitesparse-umfpack -OCTAVE_RUN_DEPENDS= octave:math/octave \ - octave-forge-statistics>0:math/octave-forge-statistics - post-install: # remove empty directories, see https://git.dynare.org/Dynare/dynare/-/issues/1835 @${FIND} ${STAGEDIR}${PREFIX} -type d -empty -delete diff --git a/science/dynare/distinfo b/science/dynare/distinfo index 107aa2a671f1..7223caef9cd9 100644 --- a/science/dynare/distinfo +++ b/science/dynare/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1679621855 -SHA256 (dynare-5.4.tar.xz) = c174a3ebcaf8c4566b9836abad8c04148011bec2ec610ded234f406bfbdd10f8 -SIZE (dynare-5.4.tar.xz) = 18005284 +TIMESTAMP = 1778438040 +SHA256 (dynare-7.0.tar.xz) = 3c1691f68386f4d74d3ca518d19df34d82644eba1db066964e77434487a3a083 +SIZE (dynare-7.0.tar.xz) = 23899676 diff --git a/science/dynare/files/example.sh b/science/dynare/files/example.sh new file mode 100644 index 000000000000..955c3d260962 --- /dev/null +++ b/science/dynare/files/example.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Run a Dynare example model (neo-classical Ramsey deterministic). +# Dynare does not allow periods in directory names, so we copy the +# .mod file to a temporary directory before running. +tmpdir=$(mktemp -d) +trap 'rm -rf "$tmpdir"' EXIT +cp ./work/dynare-7.0/tests/optimal_policy/neo_ramsey_det_bytecode.mod "$tmpdir/" +cd "$tmpdir" +octave --eval 'dynare neo_ramsey_det_bytecode.mod' diff --git a/science/dynare/files/patch-dynare++_kord_journal.cc b/science/dynare/files/patch-dynare++_kord_journal.cc deleted file mode 100644 index 2abfa11f8d4a..000000000000 --- a/science/dynare/files/patch-dynare++_kord_journal.cc +++ /dev/null @@ -1,25 +0,0 @@ -- FreeBSD compatibility. - ---- dynare++/kord/journal.cc.orig 2021-08-14 01:22:14 UTC -+++ dynare++/kord/journal.cc -@@ -33,7 +33,7 @@ - # include <sys/utsname.h> // For uname() - # include <cstdlib> // For getloadavg() - # include <unistd.h> // For sysconf() --# ifdef __APPLE__ -+# if defined(__APPLE__) || defined(__FreeBSD__) - # include <sys/types.h> - # include <sys/sysctl.h> - # endif -@@ -57,9 +57,9 @@ SystemResources::pageSize() - long - SystemResources::availableMemory() - { --#if !defined(_WIN32) && !defined(__APPLE__) -+#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__) - return sysconf(_SC_AVPHYS_PAGES)*pageSize(); --#elif defined(__APPLE__) -+#elif defined(__APPLE__) || defined(__FreeBSD__) - unsigned long usermem = 0; - size_t len = sizeof usermem; - static int mib[2] = { CTL_HW, HW_USERMEM }; diff --git a/science/dynare/files/patch-meson.build b/science/dynare/files/patch-meson.build new file mode 100644 index 000000000000..3b33358e5ef6 --- /dev/null +++ b/science/dynare/files/patch-meson.build @@ -0,0 +1,26 @@ +-- FreeBSD compatibility: link the korder library and its test executables against pthreads. +-- The korder library's thread_pool.cc uses std::thread which requires pthreads on FreeBSD. +-- On Linux/macOS this is implicit; on FreeBSD it must be explicitly declared. + +--- meson.build.orig 2025-03-19 00:00:00 UTC ++++ meson.build 2025-03-19 00:00:00 UTC +@@ -496,9 +496,10 @@ + 'mex/sources/libkorder/dynamic_m.cc' ] + korder_incdir = include_directories('mex/sources/libkorder', 'mex/sources/libkorder/tl', 'mex/sources/libkorder/sylv', + 'mex/sources/libkorder/kord', 'mex/sources/libkorder/utils') ++threads_dep = dependency('threads') + korder_lib = static_library('korder', korder_src, + kwargs : static_library_kwargs + { 'include_directories' : static_library_kwargs.get('include_directories') + korder_incdir}, +- dependencies : [ blas_dep, lapack_dep, dl_dep ]) ++ dependencies : [ blas_dep, lapack_dep, dl_dep, threads_dep ]) + + korder_mex_kwargs = mex_kwargs + { 'include_directories' : mex_kwargs.get('include_directories') + korder_incdir} + shared_module('gensylv', 'mex/sources/gensylv/gensylv.cc', kwargs : korder_mex_kwargs, link_with : korder_lib) +@@ -515,6 +516,7 @@ + 'cpp_args' : mex_kwargs['cpp_args'], + 'link_args' : exe_link_args, + 'build_rpath' : exe_rpath, ++ 'dependencies' : threads_dep, + 'link_with' : korder_lib } + + k_order_sylv_test_exe = executable('k_order_sylv_test', [ 'mex/sources/libkorder/sylv/tests/MMMatrix.cc', diff --git a/science/dynare/files/patch-mex_build_octave_configure b/science/dynare/files/patch-mex_build_octave_configure deleted file mode 100644 index 774083adc441..000000000000 --- a/science/dynare/files/patch-mex_build_octave_configure +++ /dev/null @@ -1,88 +0,0 @@ -- remove fortran-related crashing section when fortran compiler is checked for cross-compilation -- it's unclear why the fortran-built executable crashes - ---- mex/build/octave/configure.orig 2022-04-23 05:48:46 UTC -+++ mex/build/octave/configure -@@ -3332,44 +3332,44 @@ _ACEOF - ac_clean_files="$ac_clean_files conftest.out" - # Check that the compiler produces executables we can run. If not, either - # the compiler is broken, or we cross compile. --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 --$as_echo_n "checking whether we are cross compiling... " >&6; } --if test "$cross_compiling" != yes; then -- { { ac_try="$ac_link" --case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_link") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } -- if { ac_try='./conftest$ac_cv_exeext' -- { { case "(($ac_try" in -- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -- *) ac_try_echo=$ac_try;; --esac --eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" --$as_echo "$ac_try_echo"; } >&5 -- (eval "$ac_try") 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; }; then -- cross_compiling=no -- else -- if test "$cross_compiling" = maybe; then -- cross_compiling=yes -- else -- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 --$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} --as_fn_error $? "cannot run Fortran compiled programs. --If you meant to cross compile, use \`--host'. --See \`config.log' for more details" "$LINENO" 5; } -- fi -- fi --fi -+#{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -+#$as_echo_n "checking whether we are cross compiling... " >&6; } -+#if test "$cross_compiling" != yes; then -+# { { ac_try="$ac_link" -+#case "(($ac_try" in -+# *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+# *) ac_try_echo=$ac_try;; -+#esac -+#eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -+#$as_echo "$ac_try_echo"; } >&5 -+# (eval "$ac_link") 2>&5 -+# ac_status=$? -+# $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -+# test $ac_status = 0; } -+# if { ac_try='./conftest$ac_cv_exeext' -+# { { case "(($ac_try" in -+# *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; -+# *) ac_try_echo=$ac_try;; -+#esac -+#eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -+#$as_echo "$ac_try_echo"; } >&5 -+# (eval "$ac_try") 2>&5 -+# ac_status=0 -+# $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -+# test $ac_status = 0; }; }; then -+# cross_compiling=no -+# else -+# if test "$cross_compiling" = maybe; then -+# cross_compiling=yes -+# else -+# { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+#$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -+#as_fn_error $? "cannot run Fortran compiled programs. -+#If you meant to cross compile, use \`--host'. -+#See \`config.log' for more details" "$LINENO" 5; } -+# fi -+# fi -+#fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 - $as_echo "$cross_compiling" >&6; } - diff --git a/science/dynare/files/patch-mex_sources_libkorder_kord_journal.cc b/science/dynare/files/patch-mex_sources_libkorder_kord_journal.cc new file mode 100644 index 000000000000..ca7a6a3a4eb7 --- /dev/null +++ b/science/dynare/files/patch-mex_sources_libkorder_kord_journal.cc @@ -0,0 +1,29 @@ +-- FreeBSD compatibility: fix invalid preprocessor directive '#ifdef __APPLE__ || defined(__FreeBSD__)' +-- (the '|| defined(...)' part is silently ignored by the preprocessor). The correct form is +-- '#if defined(__APPLE__) || defined(__FreeBSD__)'. +-- Also adds FreeBSD-specific memory query using sysctl(3) instead of sysconf(3), as +-- _SC_AVPHYS_PAGES is not available on FreeBSD. + +--- mex/sources/libkorder/kord/journal.cc.orig 2025-03-19 00:00:00 UTC ++++ mex/sources/libkorder/kord/journal.cc 2025-03-19 00:00:00 UTC +@@ -33,7 +33,7 @@ + # include <sys/time.h> // For getrusage() + # include <sys/utsname.h> // For uname() + # include <unistd.h> // For sysconf() +-# ifdef __APPLE__ ++# if defined(__APPLE__) || defined(__FreeBSD__) + # include <sys/sysctl.h> + # include <sys/types.h> + # endif +@@ -58,9 +58,9 @@ + long + SystemResources::availableMemory() + { +-#if !defined(_WIN32) && !defined(__APPLE__) ++#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__FreeBSD__) + return sysconf(_SC_AVPHYS_PAGES) * pageSize(); +-#elif defined(__APPLE__) ++#elif defined(__APPLE__) || defined(__FreeBSD__) + unsigned long usermem = 0; + size_t len = sizeof usermem; + static int mib[2] = {CTL_HW, HW_USERMEM}; diff --git a/science/dynare/files/patch-mex_sources_libkorder_utils_thread__pool.cc b/science/dynare/files/patch-mex_sources_libkorder_utils_thread__pool.cc new file mode 100644 index 000000000000..01507a472805 --- /dev/null +++ b/science/dynare/files/patch-mex_sources_libkorder_utils_thread__pool.cc @@ -0,0 +1,94 @@ +-- FreeBSD compatibility: replace std::jthread and std::stop_token (C++20 features not yet +-- available in FreeBSD's libc++) with std::thread and std::atomic<bool> for thread stop +-- signalling. + +--- mex/sources/libkorder/utils/thread_pool.cc.orig 2026-05-10 20:43:59 UTC ++++ mex/sources/libkorder/utils/thread_pool.cc +@@ -18,6 +18,7 @@ + */ + + #include <algorithm> ++#include <atomic> + #include <cassert> + #include <condition_variable> + #include <map> +@@ -45,7 +46,20 @@ std::mutex job_group_mut; // Shared by jobs in the job + std::map<job*, status> job_group_status; + std::mutex job_group_mut; // Shared by jobs in the job group + +-std::vector<std::jthread> threads; ++std::atomic<bool> stop_requested{false}; ++std::vector<std::thread> threads; ++// Cleanup guard: destroyed before 'threads', so it joins all threads before they are destructed ++struct Cleanup ++{ ++ ~Cleanup() ++ { ++ stop_requested = true; ++ thread_cv.notify_all(); ++ for (auto& t : threads) ++ if (t.joinable()) ++ t.join(); ++ } ++} cleanup_guard; + } // End of unnamed namespace + + void +@@ -64,16 +78,19 @@ initialize(int thread_number) + if (static_cast<int>(threads.size()) == thread_number) + return; + else +- threads.clear(); ++ { ++ // Stop existing threads before clearing the vector ++ stop_requested = true; ++ thread_cv.notify_all(); ++ for (auto& t : threads) ++ if (t.joinable()) ++ t.join(); ++ threads.clear(); ++ stop_requested = false; ++ } + + for (int i {0}; i < thread_number; i++) +- /* Passing the stop_token by const reference is ok (and makes clang-tidy happier), +- since the std::jthread constructor calls the lambda with the return argument of the +- get_stop_token() method, which returns a stop_token by value; hence there is no lifetime +- issue. See: +- https://stackoverflow.com/questions/72990607/const-stdstop-token-or-just-stdstop-token-as-parameter-for-thread-funct +- */ +- threads.emplace_back([](const std::stop_token& stoken) { ++ threads.emplace_back([]() { + std::unique_lock lk {global_mut}; + job* selected_job; + status* selected_job_status; +@@ -90,17 +107,20 @@ initialize(int thread_number) + return false; + }; + +- while (!stoken.stop_requested()) +- if (thread_cv.wait(lk, stoken, pick_job)) +- { +- lk.unlock(); +- selected_job->operator()(job_group_mut); +- lk.lock(); ++ while (!stop_requested) ++ { ++ thread_cv.wait(lk, [&] { return stop_requested.load() || pick_job(); }); ++ if (!stop_requested) ++ { ++ lk.unlock(); ++ selected_job->operator()(job_group_mut); ++ lk.lock(); + +- *selected_job_status = status::done; ++ *selected_job_status = status::done; + +- director_cv.notify_one(); +- } ++ director_cv.notify_one(); ++ } ++ } + }); + } + diff --git a/science/dynare/files/patch-mex_sources_local__state__space__iterations_local__state__space__iteration__2.cc b/science/dynare/files/patch-mex_sources_local__state__space__iterations_local__state__space__iteration__2.cc index 78fbffce6b66..c6380c9b904b 100644 --- a/science/dynare/files/patch-mex_sources_local__state__space__iterations_local__state__space__iteration__2.cc +++ b/science/dynare/files/patch-mex_sources_local__state__space__iterations_local__state__space__iteration__2.cc @@ -1,38 +1,42 @@ -- workaround for https://bugs.llvm.org/show_bug.cgi?id=49238 +-- FreeBSD compatibility: replace C++17 structured bindings with named tuple references. +-- Clang's OpenMP implementation does not support capturing structured bindings in parallel +-- regions (structured bindings have no address in the OpenMP data-sharing model). ---- mex/sources/local_state_space_iterations/local_state_space_iteration_2.cc.orig 2022-01-10 23:38:14 UTC -+++ mex/sources/local_state_space_iterations/local_state_space_iteration_2.cc -@@ -61,8 +61,14 @@ ss2Iteration_pruning(double *y2, double *y1, const dou +--- mex/sources/local_state_space_iterations/local_state_space_iteration_2.cc.orig 2025-03-19 00:00:00 UTC ++++ mex/sources/local_state_space_iterations/local_state_space_iteration_2.cc 2025-03-19 00:00:00 UTC +@@ -69,8 +69,15 @@ const double one = 1.0; const blas_int ONE = 1; #endif - auto [ii1, ii2, ii3] = set_vector_of_indices(n, m); // vector indices for ghxx - auto [jj1, jj2, jj3] = set_vector_of_indices(q, m); // vector indices for ghuu -+ auto [ii1_, ii2_, ii3_] = set_vector_of_indices(n, m); // vector indices for ghxx -+ auto ii1 = ii1_; -+ auto ii2 = ii2_; -+ auto ii3 = ii3_; -+ auto [jj1_, jj2_, jj3_] = set_vector_of_indices(q, m); // vector indices for ghuu -+ auto jj1 = jj1_; -+ auto jj2 = jj2_; -+ auto jj3 = jj3_; ++ // Use named tuple variables instead of structured bindings (clang OpenMP limitation) ++ auto ghxx_indices = set_vector_of_indices(n, m); ++ const auto& ii1 = std::get<0>(ghxx_indices); ++ const auto& ii2 = std::get<1>(ghxx_indices); ++ const auto& ii3 = std::get<2>(ghxx_indices); ++ auto ghuu_indices = set_vector_of_indices(q, m); ++ const auto& jj1 = std::get<0>(ghuu_indices); ++ const auto& jj2 = std::get<1>(ghuu_indices); ++ const auto& jj3 = std::get<2>(ghuu_indices); #pragma omp parallel for num_threads(number_of_threads) for (int particle = 0; particle < s; particle++) { -@@ -139,8 +145,14 @@ ss2Iteration(double *y, const double *yhat, const doub +@@ -148,8 +155,15 @@ const double one = 1.0; const blas_int ONE = 1; #endif - auto [ii1, ii2, ii3] = set_vector_of_indices(n, m); // vector indices for ghxx - auto [jj1, jj2, jj3] = set_vector_of_indices(q, m); // vector indices for ghuu -+ auto [ii1_, ii2_, ii3_] = set_vector_of_indices(n, m); // vector indices for ghxx -+ auto ii1 = ii1_; -+ auto ii2 = ii2_; -+ auto ii3 = ii3_; -+ auto [jj1_, jj2_, jj3_] = set_vector_of_indices(q, m); // vector indices for ghuu -+ auto jj1 = jj1_; -+ auto jj2 = jj2_; -+ auto jj3 = jj3_; ++ // Use named tuple variables instead of structured bindings (clang OpenMP limitation) ++ auto ghxx_indices = set_vector_of_indices(n, m); ++ const auto& ii1 = std::get<0>(ghxx_indices); ++ const auto& ii2 = std::get<1>(ghxx_indices); ++ const auto& ii3 = std::get<2>(ghxx_indices); ++ auto ghuu_indices = set_vector_of_indices(q, m); ++ const auto& jj1 = std::get<0>(ghuu_indices); ++ const auto& jj2 = std::get<1>(ghuu_indices); ++ const auto& jj3 = std::get<2>(ghuu_indices); #pragma omp parallel for num_threads(number_of_threads) for (int particle = 0; particle < s; particle++) { diff --git a/science/dynare/files/patch-preprocessor_src_DynareMain.cc b/science/dynare/files/patch-preprocessor_src_DynareMain.cc new file mode 100644 index 000000000000..3923dec9e352 --- /dev/null +++ b/science/dynare/files/patch-preprocessor_src_DynareMain.cc @@ -0,0 +1,16 @@ +-- FreeBSD compatibility: replace std::jthread and std::stop_token (C++20 features not yet +-- available in FreeBSD's libc++ as of clang 19) with std::thread and std::atomic<bool> for +-- thread stop signalling in the dynare preprocessor's MEX parallel compilation worker pool. +-- Also adds a RAII MEXWorkersJoiner struct to safely join threads on program exit. + +--- preprocessor/src/DynareMain.cc.orig 2025-03-19 00:00:00 UTC ++++ preprocessor/src/DynareMain.cc 2025-03-19 00:00:00 UTC +@@ -511,7 +511,7 @@ + } + + if (mod_file->use_dll) +- ModelTree::initializeMEXCompilationWorkers(max(jthread::hardware_concurrency(), 1U), dynareroot, ++ ModelTree::initializeMEXCompilationWorkers(max(thread::hardware_concurrency(), 1U), dynareroot, + mexext); + + if (json == JsonOutputPointType::parsing) diff --git a/science/dynare/files/patch-preprocessor_src_ModelTree.cc b/science/dynare/files/patch-preprocessor_src_ModelTree.cc new file mode 100644 index 000000000000..db16d1fcb0be --- /dev/null +++ b/science/dynare/files/patch-preprocessor_src_ModelTree.cc @@ -0,0 +1,111 @@ +-- FreeBSD compatibility: replace std::jthread and std::stop_token (C++20 features not yet +-- available in FreeBSD's libc++ as of clang 19) with std::thread and std::atomic<bool> for +-- thread stop signalling in the dynare preprocessor's MEX parallel compilation worker pool. +-- Also adds a RAII MEXWorkersJoiner struct to safely join threads on program exit. + +--- preprocessor/src/ModelTree.cc.orig 2025-03-19 00:00:00 UTC ++++ preprocessor/src/ModelTree.cc 2025-03-19 00:00:00 UTC +@@ -47,7 +47,18 @@ + vector<tuple<filesystem::path, set<filesystem::path>, string>> ModelTree::mex_compilation_queue; + set<filesystem::path> ModelTree::mex_compilation_ongoing, ModelTree::mex_compilation_done, + ModelTree::mex_compilation_failed; +-vector<jthread> ModelTree::mex_compilation_workers; ++/* NB: stop_requested must be listed *before* workers so it is destroyed *after* ++ workers are joined (reverse destruction order). Workers rely on stop_requested ++ being valid while they run. */ ++atomic<bool> ModelTree::mex_compilation_stop_requested{false}; ++vector<thread> ModelTree::mex_compilation_workers; ++/* Declared after workers so it is destroyed first; its destructor signals all ++ worker threads to stop and joins them before the vector destructor runs ++ (which would call std::terminate on still-joinable threads). */ ++static const struct MEXWorkersJoiner ++{ ++ ~MEXWorkersJoiner() { ModelTree::stopMEXCompilationWorkers(); } ++} mex_workers_joiner; + + void + ModelTree::copyHelper(const ModelTree& m) +@@ -1961,13 +1972,7 @@ + cout << "Spawning " << numworkers << " threads for compiling MEX files." << '\n'; + + for (int i {0}; i < numworkers; i++) +- /* Passing the stop_token by const reference is ok (and makes clang-tidy happier), +- since the std::jthread constructor calls the lambda with the return argument of the +- get_stop_token() method, which returns a stop_token by value; hence there is no lifetime +- issue. See: +- https://stackoverflow.com/questions/72990607/const-stdstop-token-or-just-stdstop-token-as-parameter-for-thread-funct +- */ +- mex_compilation_workers.emplace_back([](const stop_token& stoken) { ++ mex_compilation_workers.emplace_back([] { + unique_lock lk {mex_compilation_mut}; + filesystem::path output; + string cmd; +@@ -1989,23 +1994,27 @@ + return false; + }; + +- while (!stoken.stop_requested()) +- if (mex_compilation_cv.wait(lk, stoken, pick_job)) +- { +- lk.unlock(); +- int r {system(cmd.c_str())}; +- lk.lock(); +- mex_compilation_ongoing.erase(output); +- if (r) +- mex_compilation_failed.insert(output); +- else +- mex_compilation_done.insert(output); +- /* The object just compiled may be a prerequisite for several +- other objects, so notify all waiting workers. Also needed to +- notify the main thread when in +- ModelTree::waitForMEXCompilationWorkers().*/ +- mex_compilation_cv.notify_all(); +- } ++ while (!mex_compilation_stop_requested) ++ { ++ mex_compilation_cv.wait(lk, [&pick_job] { ++ return mex_compilation_stop_requested.load() || pick_job(); ++ }); ++ if (mex_compilation_stop_requested) ++ break; ++ lk.unlock(); ++ int r {system(cmd.c_str())}; ++ lk.lock(); ++ mex_compilation_ongoing.erase(output); ++ if (r) ++ mex_compilation_failed.insert(output); ++ else ++ mex_compilation_done.insert(output); ++ /* The object just compiled may be a prerequisite for several ++ other objects, so notify all waiting workers. Also needed to ++ notify the main thread when in ++ ModelTree::waitForMEXCompilationWorkers().*/ ++ mex_compilation_cv.notify_all(); ++ } + }); + + /* Set some environment variables needed for compilation on Windows/MATLAB +@@ -2062,12 +2071,22 @@ + for (const auto& p : mex_compilation_failed) + cerr << p.string() << " "; + cerr << '\n'; +- lk.unlock(); // So that threads can process their stoken ++ lk.unlock(); // Release lock so worker threads can exit + exit(EXIT_FAILURE); + } + } + + void ++ModelTree::stopMEXCompilationWorkers() ++{ ++ mex_compilation_stop_requested = true; ++ mex_compilation_cv.notify_all(); ++ for (auto& w : mex_compilation_workers) ++ if (w.joinable()) ++ w.join(); ++} ++ ++void + ModelTree::computingPassBlock(const eval_context_t& eval_context, bool no_tmp_terms) + { + if (!heterogeneity_table.empty()) diff --git a/science/dynare/files/patch-preprocessor_src_ModelTree.hh b/science/dynare/files/patch-preprocessor_src_ModelTree.hh new file mode 100644 index 000000000000..9bee40325319 --- /dev/null +++ b/science/dynare/files/patch-preprocessor_src_ModelTree.hh @@ -0,0 +1,30 @@ +-- FreeBSD compatibility: replace std::jthread and std::stop_token (C++20 features not yet +-- available in FreeBSD's libc++ as of clang 19) with std::thread and std::atomic<bool> for +-- thread stop signalling in the dynare preprocessor's MEX parallel compilation worker pool. + +--- preprocessor/src/ModelTree.hh.orig 2025-03-19 00:00:00 UTC ++++ preprocessor/src/ModelTree.hh 2025-03-19 00:00:00 UTC +@@ -22,6 +22,7 @@ + + #include <array> + #include <cassert> ++#include <atomic> + #include <condition_variable> + #include <deque> + #include <filesystem> +@@ -441,8 +442,14 @@ + vector<int> endo2eq; + + // Stores workers used for compiling MEX files in parallel +- static vector<jthread> mex_compilation_workers; ++ static vector<thread> mex_compilation_workers; ++ static atomic<bool> mex_compilation_stop_requested; + ++public: ++ static void stopMEXCompilationWorkers(); ++ ++private: ++ + /* The following variables implement the thread synchronization mechanism for + limiting the number of concurrent GCC processes and tracking dependencies + between object files. */ diff --git a/science/dynare/files/patch-preprocessor_src_meson.build b/science/dynare/files/patch-preprocessor_src_meson.build new file mode 100644 index 000000000000..58a3cc21e06f --- /dev/null +++ b/science/dynare/files/patch-preprocessor_src_meson.build @@ -0,0 +1,21 @@ +-- FreeBSD compatibility: link the dynare preprocessor against pthreads. +-- std::thread requires pthreads on FreeBSD; the original code used std::jthread +-- whose thread support was implicitly pulled in by the C++ standard library. +-- After replacing jthread with std::thread, an explicit threads dependency is needed. + +--- preprocessor/src/meson.build.orig 2025-03-19 00:00:00 UTC ++++ preprocessor/src/meson.build 2025-03-19 00:00:00 UTC +@@ -1,4 +1,5 @@ + boost_dep = dependency('boost') ++threads_dep = dependency('threads') + + ## Flex stuff + flex_exe = find_program('flex') +@@ -74,6 +75,6 @@ + endif + + executable('dynare-preprocessor', preprocessor_src, flex_src, flexlexer_h, bison_src, +- include_directories : preprocessor_incdir, dependencies : boost_dep, ++ include_directories : preprocessor_incdir, dependencies : [boost_dep, threads_dep], + link_args : preprocessor_link_args, + install : true) diff --git a/science/dynare/pkg-plist b/science/dynare/pkg-plist index 4d4f681e37f0..edf5857ceec4 100644 --- a/science/dynare/pkg-plist +++ b/science/dynare/pkg-plist @@ -1,30 +1,4 @@ -bin/dynare++ bin/dynare-preprocessor -lib/dynare/contrib/jsonlab/jsonlab/AUTHORS.txt -lib/dynare/contrib/jsonlab/jsonlab/ChangeLog.txt -lib/dynare/contrib/jsonlab/jsonlab/LICENSE_BSD.txt -lib/dynare/contrib/jsonlab/jsonlab/LICENSE_GPLv3.txt -lib/dynare/contrib/jsonlab/jsonlab/README.rst -lib/dynare/contrib/jsonlab/jsonlab/README.txt -lib/dynare/contrib/jsonlab/jsonlab/examples/demo_jsonlab_basic.m -lib/dynare/contrib/jsonlab/jsonlab/examples/demo_ubjson_basic.m -lib/dynare/contrib/jsonlab/jsonlab/examples/example1.json -lib/dynare/contrib/jsonlab/jsonlab/examples/example2.json -lib/dynare/contrib/jsonlab/jsonlab/examples/example3.json -lib/dynare/contrib/jsonlab/jsonlab/examples/example4.json -lib/dynare/contrib/jsonlab/jsonlab/examples/jsonlab_basictest.matlab -lib/dynare/contrib/jsonlab/jsonlab/examples/jsonlab_selftest.m -lib/dynare/contrib/jsonlab/jsonlab/examples/jsonlab_selftest.matlab -lib/dynare/contrib/jsonlab/jsonlab/examples/jsonlab_speedtest.m -lib/dynare/contrib/jsonlab/jsonlab/jsonopt.m -lib/dynare/contrib/jsonlab/jsonlab/loadjson.m -lib/dynare/contrib/jsonlab/jsonlab/loadubjson.m -lib/dynare/contrib/jsonlab/jsonlab/mergestruct.m -lib/dynare/contrib/jsonlab/jsonlab/package.json -lib/dynare/contrib/jsonlab/jsonlab/savejson.m -lib/dynare/contrib/jsonlab/jsonlab/saveubjson.m -lib/dynare/contrib/jsonlab/jsonlab/struct2jdata.m -lib/dynare/contrib/jsonlab/jsonlab/varargin2struct.m lib/dynare/contrib/ms-sbvar/TZcode/MatlabFiles/a0asfun.m lib/dynare/contrib/ms-sbvar/TZcode/MatlabFiles/a0asgrad.m lib/dynare/contrib/ms-sbvar/TZcode/MatlabFiles/a0freefun.m @@ -265,56 +239,152 @@ lib/dynare/contrib/ms-sbvar/TZcode/MatlabFiles/tran_b2a.m lib/dynare/contrib/ms-sbvar/TZcode/MatlabFiles/xydata.m lib/dynare/contrib/ms-sbvar/TZcode/MatlabFiles/zimpulse.m lib/dynare/contrib/ms-sbvar/TZcode/MatlabFiles/zroot.m -lib/dynare/dynare++/dynare_simul.m -lib/dynare/examples/Gali_2015.mod -lib/dynare/examples/Gali_2015_PC_slope.m -lib/dynare/examples/Gali_2015_prior_restrictions.m -lib/dynare/examples/NK_baseline.mod -lib/dynare/examples/NK_baseline_steadystate.m -lib/dynare/examples/Occbin_example.mod -lib/dynare/examples/Ramsey_Example.mod -lib/dynare/examples/Ramsey_steady_file.mod -lib/dynare/examples/Ramsey_steady_file_steadystate.m -lib/dynare/examples/agtrend.mod -lib/dynare/examples/bkk.mod -lib/dynare/examples/dynare++/README.txt -lib/dynare/examples/dynare++/example1.mod -lib/dynare/examples/example1.mod -lib/dynare/examples/example1_reporting.mod -lib/dynare/examples/example2.mod -lib/dynare/examples/example3.mod -lib/dynare/examples/example3_steady_state_helper.m -lib/dynare/examples/fs2000.mod -lib/dynare/examples/fs2000_nonstationary.mod -lib/dynare/examples/fsdat_simul.m -lib/dynare/examples/ramst.mod +lib/dynare/matlab/+backward_model/dynamic_model.m +lib/dynare/matlab/+backward_model/forecast.m +lib/dynare/matlab/+backward_model/initialize.m +lib/dynare/matlab/+backward_model/inversion.m +lib/dynare/matlab/+backward_model/irf.m +lib/dynare/matlab/+backward_model/shock_decomposition.m +lib/dynare/matlab/+backward_model/simul_linear_model.m +lib/dynare/matlab/+backward_model/simul_nonlinear_model.m +lib/dynare/matlab/+backward_model/simul_static_model.m lib/dynare/matlab/+bgp/write.m +lib/dynare/matlab/+bvar/density.m +lib/dynare/matlab/+bvar/forecast.m +lib/dynare/matlab/+bvar/graph_init.m +lib/dynare/matlab/+bvar/irf.m +lib/dynare/matlab/+bvar/toolbox.m +lib/dynare/matlab/+conditional_forecasts/get_shock_paths.m +lib/dynare/matlab/+conditional_forecasts/plot.m +lib/dynare/matlab/+conditional_forecasts/run.m lib/dynare/matlab/+equation/evaluate.m lib/dynare/matlab/+estimate/nls.m +lib/dynare/matlab/+forecasts/graph.m +lib/dynare/matlab/+forecasts/run.m +lib/dynare/matlab/+forecasts/stochastic_classical.m +lib/dynare/matlab/+gsa/Morris_Measure_Groups.m +lib/dynare/matlab/+gsa/Sampling_Function_2.m +lib/dynare/matlab/+gsa/boxplot.m +lib/dynare/matlab/+gsa/cumplot.m +lib/dynare/matlab/+gsa/log_transform.m +lib/dynare/matlab/+gsa/map_calibration.m +lib/dynare/matlab/+gsa/map_identification.m +lib/dynare/matlab/+gsa/monte_carlo_filtering.m +lib/dynare/matlab/+gsa/monte_carlo_filtering_analysis.m +lib/dynare/matlab/+gsa/monte_carlo_moments.m +lib/dynare/matlab/+gsa/prior_draw.m +lib/dynare/matlab/+gsa/priorcdf.m +lib/dynare/matlab/+gsa/reduced_form_mapping.m +lib/dynare/matlab/+gsa/reduced_form_screening.m +lib/dynare/matlab/+gsa/run.m +lib/dynare/matlab/+gsa/scatter_analysis.m +lib/dynare/matlab/+gsa/scatter_mcf.m +lib/dynare/matlab/+gsa/scatter_plots.m +lib/dynare/matlab/+gsa/set_shocks_param.m +lib/dynare/matlab/+gsa/skewness.m +lib/dynare/matlab/+gsa/smirnov_test.m +lib/dynare/matlab/+gsa/stability_mapping.m +lib/dynare/matlab/+gsa/stability_mapping_bivariate.m +lib/dynare/matlab/+gsa/stability_mapping_univariate.m +lib/dynare/matlab/+gsa/standardize_columns.m +lib/dynare/matlab/+gsa/tcrit.m +lib/dynare/matlab/+gsa/teff.m +lib/dynare/matlab/+gsa/th_moments.m lib/dynare/matlab/+gui/+perfect_foresight/run.m lib/dynare/matlab/+gui/+stochastic-simulation/read.m -lib/dynare/matlab/+mom/check_plot.m -lib/dynare/matlab/+mom/data_moments.m +lib/dynare/matlab/+heterogeneity/check_steady_state_input.m +lib/dynare/matlab/+heterogeneity/compute_steady_state.m +lib/dynare/matlab/+heterogeneity/load_steady_state.m +lib/dynare/matlab/+heterogeneity/plot_irfs.m +lib/dynare/matlab/+heterogeneity/plot_simulation.m +lib/dynare/matlab/+heterogeneity/simulate.m +lib/dynare/matlab/+heterogeneity/simulate_irfs.m +lib/dynare/matlab/+heterogeneity/simulate_news_shocks.m +lib/dynare/matlab/+heterogeneity/simulate_stochastic_shocks.m +lib/dynare/matlab/+heterogeneity/solve.m +lib/dynare/matlab/+identification/analysis.m +lib/dynare/matlab/+identification/bruteforce.m +lib/dynare/matlab/+identification/checks.m +lib/dynare/matlab/+identification/checks_via_subsets.m +lib/dynare/matlab/+identification/cosn.m +lib/dynare/matlab/+identification/display.m +lib/dynare/matlab/+identification/fjaco.m +lib/dynare/matlab/+identification/get_jacobians.m +lib/dynare/matlab/+identification/get_minimal_state_representation.m +lib/dynare/matlab/+identification/get_perturbation_params_derivs.m +lib/dynare/matlab/+identification/get_perturbation_params_derivs_numerical_objective.m +lib/dynare/matlab/+identification/hessian_sparse.m +lib/dynare/matlab/+identification/legacy_dynamic_g1.m +lib/dynare/matlab/+identification/legacy_dynamic_g1p.m +lib/dynare/matlab/+identification/legacy_dynamic_g1pp.m +lib/dynare/matlab/+identification/legacy_dynamic_g2.m +lib/dynare/matlab/+identification/legacy_dynamic_g2p.m +lib/dynare/matlab/+identification/legacy_dynamic_g3.m +lib/dynare/matlab/+identification/legacy_dynamic_g3p.m +lib/dynare/matlab/+identification/legacy_dynamic_g4.m +lib/dynare/matlab/+identification/legacy_idx.m +lib/dynare/matlab/+identification/legacy_static_g1p.m +lib/dynare/matlab/+identification/numerical_objective.m +lib/dynare/matlab/+identification/plot.m +lib/dynare/matlab/+identification/run.m +lib/dynare/matlab/+identification/simulated_moment_uncertainty.m +lib/dynare/matlab/+identification/unfold_g3.m +lib/dynare/matlab/+identification/unfold_g4.m +lib/dynare/matlab/+identification/vnorm.m +lib/dynare/matlab/+mom/Jtest.m +lib/dynare/matlab/+mom/check_irf_matching_file.m +lib/dynare/matlab/+mom/default_option_mom_values.m +lib/dynare/matlab/+mom/display_comparison_moments_irfs.m +lib/dynare/matlab/+mom/get_data_moments.m +lib/dynare/matlab/+mom/graph_comparison_irfs.m +lib/dynare/matlab/+mom/matched_irfs_blocks.m +lib/dynare/matlab/+mom/matched_moments_block.m +lib/dynare/matlab/+mom/mode_compute_gmm_smm.m +lib/dynare/matlab/+mom/mode_compute_irf_matching.m lib/dynare/matlab/+mom/objective_function.m lib/dynare/matlab/+mom/optimal_weighting_matrix.m +lib/dynare/matlab/+mom/print_info_on_estimation_settings.m lib/dynare/matlab/+mom/run.m +lib/dynare/matlab/+mom/set_correct_bounds_for_stderr_corr.m lib/dynare/matlab/+mom/standard_errors.m +lib/dynare/matlab/+mom/transform_prior_to_laplace_prior.m +lib/dynare/matlab/+occbin/+ppf/compute_weights.m +lib/dynare/matlab/+occbin/+ppf/conditional_data_density.m +lib/dynare/matlab/+occbin/+ppf/draw_particles.m +lib/dynare/matlab/+occbin/+ppf/engine.m +lib/dynare/matlab/+occbin/+ppf/graphs.m +lib/dynare/matlab/+occbin/+ppf/joint_density.m +lib/dynare/matlab/+occbin/+ppf/marginal_density.m +lib/dynare/matlab/+occbin/+ppf/mcmc_draws.m +lib/dynare/matlab/+occbin/+ppf/simulated_density.m +lib/dynare/matlab/+occbin/+ppf/state_importance_sampling.m +lib/dynare/matlab/+occbin/+ppf/state_priordens.m lib/dynare/matlab/+occbin/DSGE_smoother.m lib/dynare/matlab/+occbin/IVF_core.m lib/dynare/matlab/+occbin/IVF_posterior.m +lib/dynare/matlab/+occbin/backward_map_regime.m lib/dynare/matlab/+occbin/check_regimes.m +lib/dynare/matlab/+occbin/cost_function.m lib/dynare/matlab/+occbin/dynare_resolve.m +lib/dynare/matlab/+occbin/findmin.m +lib/dynare/matlab/+occbin/forecast.m lib/dynare/matlab/+occbin/get_deriv.m lib/dynare/matlab/+occbin/get_pq.m lib/dynare/matlab/+occbin/graph.m +lib/dynare/matlab/+occbin/irf.m lib/dynare/matlab/+occbin/kalman_update_algo_1.m lib/dynare/matlab/+occbin/kalman_update_algo_3.m +lib/dynare/matlab/+occbin/kalman_update_engine.m lib/dynare/matlab/+occbin/make_chart.m lib/dynare/matlab/+occbin/map_regime.m lib/dynare/matlab/+occbin/match_function.m lib/dynare/matlab/+occbin/mkdata.m lib/dynare/matlab/+occbin/mkdatap_anticipated_2constraints_dyn.m lib/dynare/matlab/+occbin/mkdatap_anticipated_dyn.m +lib/dynare/matlab/+occbin/pkf_conditional_density.m +lib/dynare/matlab/+occbin/plot_irfs.m +lib/dynare/matlab/+occbin/plot_regimes.m +lib/dynare/matlab/+occbin/posterior_importance_sampling.m lib/dynare/matlab/+occbin/set_default_options.m lib/dynare/matlab/+occbin/set_option.m lib/dynare/matlab/+occbin/setup.m @@ -322,8 +392,14 @@ lib/dynare/matlab/+occbin/shock_decomposition.m lib/dynare/matlab/+occbin/solve_one_constraint.m lib/dynare/matlab/+occbin/solve_two_constraints.m lib/dynare/matlab/+occbin/solver.m +lib/dynare/matlab/+occbin/squeeze_shock_decomposition.m lib/dynare/matlab/+occbin/unpack_simulations.m lib/dynare/matlab/+occbin/write_regimes_to_xls.m +lib/dynare/matlab/+osr/get_variance_of_endogenous_variables.m +lib/dynare/matlab/+osr/objective.m +lib/dynare/matlab/+osr/run.m +lib/dynare/matlab/+pac/+bgp/get.m +lib/dynare/matlab/+pac/+bgp/set.m lib/dynare/matlab/+pac/+estimate/init.m lib/dynare/matlab/+pac/+estimate/iterative_ols.m lib/dynare/matlab/+pac/+estimate/nls.m @@ -334,11 +410,36 @@ lib/dynare/matlab/+pac/+update/parameters.m lib/dynare/matlab/+pac/check.m lib/dynare/matlab/+pac/initialize.m lib/dynare/matlab/+pac/print.m +lib/dynare/matlab/+pruned_SS/Q6_plication.m +lib/dynare/matlab/+pruned_SS/allVL1.m +lib/dynare/matlab/+pruned_SS/bivmom.m +lib/dynare/matlab/+pruned_SS/commutation.m +lib/dynare/matlab/+pruned_SS/duplication.m +lib/dynare/matlab/+pruned_SS/prodmom.m +lib/dynare/matlab/+pruned_SS/prodmom_deriv.m +lib/dynare/matlab/+pruned_SS/pruned_state_space_system.m +lib/dynare/matlab/+pruned_SS/quadruplication.m +lib/dynare/matlab/+pruned_SS/uperm.m lib/dynare/matlab/+var_expectation/initialize.m lib/dynare/matlab/+var_expectation/print.m lib/dynare/matlab/+var_expectation/update.m lib/dynare/matlab/+var_expectation/update_parameters.m -lib/dynare/matlab/AHessian.m +lib/dynare/matlab/+wait_bar/close.m +lib/dynare/matlab/+wait_bar/multi.m +lib/dynare/matlab/+wait_bar/run.m +lib/dynare/matlab/@dprior/admissible.m +lib/dynare/matlab/@dprior/densities.m +lib/dynare/matlab/@dprior/density.m +lib/dynare/matlab/@dprior/dprior.m +lib/dynare/matlab/@dprior/draw.m +lib/dynare/matlab/@dprior/draws.m +lib/dynare/matlab/@dprior/length.m +lib/dynare/matlab/@dprior/mean.m +lib/dynare/matlab/@dprior/median.m +lib/dynare/matlab/@dprior/mode.m +lib/dynare/matlab/@dprior/moments.m +lib/dynare/matlab/@dprior/subsref.m +lib/dynare/matlab/@dprior/variance.m lib/dynare/matlab/AIM/README.txt lib/dynare/matlab/AIM/SPAimerr.m lib/dynare/matlab/AIM/SPAmalg.m @@ -350,145 +451,91 @@ lib/dynare/matlab/AIM/SPNumeric_shift.m lib/dynare/matlab/AIM/SPObstruct.m lib/dynare/matlab/AIM/SPReduced_form.m lib/dynare/matlab/AIM/SPShiftright.m -lib/dynare/matlab/AIM/dynAIMsolver1.m -lib/dynare/matlab/AIM_first_order_solver.m lib/dynare/matlab/CheckPath.m -lib/dynare/matlab/CutSample.m -lib/dynare/matlab/DsgeSmoother.m -lib/dynare/matlab/GetAllPosteriorDraws.m -lib/dynare/matlab/GetOneDraw.m -lib/dynare/matlab/GetPosteriorMeanVariance.m -lib/dynare/matlab/GetPosteriorParametersStatistics.m lib/dynare/matlab/MakeAllFigures.m -lib/dynare/matlab/PlotPosteriorDistributions.m -lib/dynare/matlab/PosteriorIRF.m -lib/dynare/matlab/PosteriorIRF_core1.m -lib/dynare/matlab/PosteriorIRF_core2.m -lib/dynare/matlab/Q6_plication.m -lib/dynare/matlab/ReshapeMatFiles.m -lib/dynare/matlab/TaRB_optimizer_wrapper.m lib/dynare/matlab/Tracing.m -lib/dynare/matlab/UnivariateSpectralDensity.m -lib/dynare/matlab/WriteShockDecomp2Excel.m lib/dynare/matlab/accessors/get_irf.m lib/dynare/matlab/accessors/get_mean.m +lib/dynare/matlab/accessors/get_mean_no_globals.m lib/dynare/matlab/accessors/get_param_by_name.m +lib/dynare/matlab/accessors/get_parameter_set_name.m lib/dynare/matlab/accessors/get_posterior_covariance.m lib/dynare/matlab/accessors/get_posterior_irf.m lib/dynare/matlab/accessors/get_posterior_timeseries.m +lib/dynare/matlab/accessors/get_shock_skew_by_name.m lib/dynare/matlab/accessors/get_shock_stderr_by_name.m lib/dynare/matlab/accessors/get_smooth.m lib/dynare/matlab/accessors/get_update.m lib/dynare/matlab/accessors/set_param_value.m +lib/dynare/matlab/accessors/set_param_value_locally.m *** 1909 LINES SKIPPED ***home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a018217.1f938.68e751bd>
