4646
4747#include < algorithm>
4848#include < cmath>
49+ #include < map>
4950#include < numeric>
5051#include < string>
5152#include < vector>
@@ -61,6 +62,7 @@ using TBoolVec = std::vector<bool>;
6162using TDoubleVec = std::vector<double >;
6263using TSizeVec = std::vector<std::size_t >;
6364using TSizeVecVec = std::vector<TSizeVec>;
65+ using TSizeSizeMap = std::map<std::size_t , std::size_t >;
6466using TStrVec = std::vector<std::string>;
6567using TTimeVec = std::vector<core_t ::TTime>;
6668using TTimeTimePr = std::pair<core_t ::TTime, core_t ::TTime>;
@@ -319,7 +321,7 @@ const std::string LAST_UPDATE_OLD_TAG{"j"};
319321
320322// ////////////////////// Upgrade to Version 6.3 ////////////////////////
321323
322- const double MODEL_WEIGHT_UPGRADING_TO_VERSION_6p3 {48.0 };
324+ const double MODEL_WEIGHT_UPGRADING_TO_VERSION_6_3 {48.0 };
323325
324326bool upgradeTrendModelToVersion6p3 (const core_t ::TTime bucketLength,
325327 CTrendComponent& trend,
@@ -342,7 +344,7 @@ bool upgradeTrendModelToVersion6p3(const core_t::TTime bucketLength,
342344
343345 // Generate some samples from the old trend model.
344346
345- double weight{MODEL_WEIGHT_UPGRADING_TO_VERSION_6p3 *
347+ double weight{MODEL_WEIGHT_UPGRADING_TO_VERSION_6_3 *
346348 static_cast <double >(bucketLength) / static_cast <double >(4 * WEEK)};
347349
348350 CPRNG::CXorOShiro128Plus rng;
@@ -355,6 +357,8 @@ bool upgradeTrendModelToVersion6p3(const core_t::TTime bucketLength,
355357 return true ;
356358}
357359
360+ const TSizeSizeMap SC_STATES_UPGRADING_TO_VERSION_6_3{{0 , 0 }, {1 , 1 }, {2 , 1 }, {3 , 2 }, {4 , 3 }};
361+
358362// //////////////////////////////////////////////////////////////////////
359363
360364// Constants
@@ -490,8 +494,9 @@ bool CTimeSeriesDecompositionDetail::CPeriodicityTest::acceptRestoreTraverser(
490494 do {
491495 const std::string& name{traverser.name ()};
492496 RESTORE (PERIODICITY_TEST_MACHINE_6_3_TAG,
493- traverser.traverseSubLevel (boost::bind (
494- &core::CStateMachine::acceptRestoreTraverser, &m_Machine, _1)))
497+ traverser.traverseSubLevel ([this ](core::CStateRestoreTraverser& traverser_) {
498+ return m_Machine.acceptRestoreTraverser (traverser_);
499+ }))
495500 RESTORE_SETUP_TEARDOWN (
496501 SHORT_WINDOW_6_3_TAG, m_Windows[E_Short].reset (this ->newWindow (E_Short)),
497502 m_Windows[E_Short] && traverser.traverseSubLevel (boost::bind (
@@ -792,8 +797,9 @@ bool CTimeSeriesDecompositionDetail::CCalendarTest::acceptRestoreTraverser(core:
792797 do {
793798 const std::string& name{traverser.name ()};
794799 RESTORE (CALENDAR_TEST_MACHINE_6_3_TAG,
795- traverser.traverseSubLevel (boost::bind (
796- &core::CStateMachine::acceptRestoreTraverser, &m_Machine, _1)))
800+ traverser.traverseSubLevel ([this ](core::CStateRestoreTraverser& traverser_) {
801+ return m_Machine.acceptRestoreTraverser (traverser_);
802+ }))
797803 RESTORE_BUILT_IN (LAST_MONTH_6_3_TAG, m_LastMonth);
798804 RESTORE_SETUP_TEARDOWN (
799805 CALENDAR_TEST_6_3_TAG,
@@ -999,8 +1005,9 @@ bool CTimeSeriesDecompositionDetail::CComponents::acceptRestoreTraverser(
9991005 while (traverser.next ()) {
10001006 const std::string& name{traverser.name ()};
10011007 RESTORE (COMPONENTS_MACHINE_6_3_TAG,
1002- traverser.traverseSubLevel (boost::bind (
1003- &core::CStateMachine::acceptRestoreTraverser, &m_Machine, _1)));
1008+ traverser.traverseSubLevel ([this ](core::CStateRestoreTraverser& traverser_) {
1009+ return m_Machine.acceptRestoreTraverser (traverser_);
1010+ }))
10041011 RESTORE_BUILT_IN (DECAY_RATE_6_3_TAG, m_DecayRate);
10051012 RESTORE (GAIN_CONTROLLER_6_3_TAG,
10061013 traverser.traverseSubLevel (boost::bind (&CGainController::acceptRestoreTraverser,
@@ -1035,8 +1042,10 @@ bool CTimeSeriesDecompositionDetail::CComponents::acceptRestoreTraverser(
10351042 do {
10361043 const std::string& name{traverser.name ()};
10371044 RESTORE (COMPONENTS_MACHINE_OLD_TAG,
1038- traverser.traverseSubLevel (boost::bind (
1039- &core::CStateMachine::acceptRestoreTraverser, &m_Machine, _1)));
1045+ traverser.traverseSubLevel ([this ](core::CStateRestoreTraverser& traverser_) {
1046+ return m_Machine.acceptRestoreTraverser (
1047+ traverser_, SC_STATES_UPGRADING_TO_VERSION_6_3);
1048+ }))
10401049 RESTORE_SETUP_TEARDOWN (TREND_OLD_TAG,
10411050 /* */ ,
10421051 traverser.traverseSubLevel (boost::bind (
@@ -1057,7 +1066,7 @@ bool CTimeSeriesDecompositionDetail::CComponents::acceptRestoreTraverser(
10571066 /* */ )
10581067 } while (traverser.next ());
10591068
1060- m_MeanVarianceScale.add (1.0 , MODEL_WEIGHT_UPGRADING_TO_VERSION_6p3 );
1069+ m_MeanVarianceScale.add (1.0 , MODEL_WEIGHT_UPGRADING_TO_VERSION_6_3 );
10611070 }
10621071 return true ;
10631072}
@@ -1951,13 +1960,15 @@ bool CTimeSeriesDecompositionDetail::CComponents::CSeasonal::acceptRestoreTraver
19511960 RESTORE_NO_ERROR (COMPONENT_6_3_TAG,
19521961 m_Components.emplace_back (decayRate, bucketLength, traverser))
19531962 }
1963+ m_PredictionErrors.resize (m_Components.size ());
19541964 } else {
19551965 // There is no version string this is historic state.
19561966 do {
19571967 const std::string& name{traverser.name ()};
19581968 RESTORE_NO_ERROR (COMPONENT_OLD_TAG,
19591969 m_Components.emplace_back (decayRate, bucketLength, traverser))
19601970 } while (traverser.next ());
1971+ m_PredictionErrors.resize (m_Components.size ());
19611972 }
19621973 return true ;
19631974}
@@ -2253,13 +2264,15 @@ bool CTimeSeriesDecompositionDetail::CComponents::CCalendar::acceptRestoreTraver
22532264 RESTORE_NO_ERROR (COMPONENT_6_3_TAG,
22542265 m_Components.emplace_back (decayRate, bucketLength, traverser))
22552266 }
2267+ m_PredictionErrors.resize (m_Components.size ());
22562268 } else {
22572269 // There is no version string this is historic state.
22582270 do {
22592271 const std::string& name{traverser.name ()};
22602272 RESTORE_NO_ERROR (COMPONENT_OLD_TAG,
22612273 m_Components.emplace_back (decayRate, bucketLength, traverser))
22622274 } while (traverser.next ());
2275+ m_PredictionErrors.resize (m_Components.size ());
22632276 }
22642277 return true ;
22652278}
0 commit comments