Skip to content

Commit 8dd3cd9

Browse files
v1.14.0 Add generateLibrary. If false (default) limit library to original data.
1 parent 4aab9f3 commit 8dd3cd9

8 files changed

Lines changed: 76 additions & 18 deletions

File tree

doc/cppEDM.pdf

2.21 KB
Binary file not shown.

etc/edm.cc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ int main( int argc, char *argv[] ) {
2222
std::string method = "simplex"; // or smap
2323
int theta = 2;
2424
int generateSteps = 0;
25+
bool generateLibrary = false;
2526
bool embedded = false; // 'y' = true
2627
bool verbose = false; // 'y' = true
2728
bool const_pred = false; // 'y' = true
@@ -41,18 +42,20 @@ int main( int argc, char *argv[] ) {
4142
if ( argc > 12 ){ method = argv[12]; }
4243
if ( argc > 13 ){ std::stringstream ss( argv[13] ); ss >> theta; }
4344
if ( argc > 14 ){ std::stringstream ss( argv[14] ); ss >> generateSteps; }
44-
if ( argc > 15 ){ embedded = ( *argv[15] == 'y' ? true : false ); }
45-
if ( argc > 16 ){ verbose = ( *argv[16] == 'y' ? true : false ); }
46-
if ( argc > 17 ){ const_pred = ( *argv[17] == 'y' ? true : false ); }
47-
if ( argc > 18 ){ parameterList = ( *argv[18] == 'y' ? true : false ); }
45+
if ( argc > 15 ){ generateLibrary = ( *argv[15] == 'y' ? true : false ); }
46+
if ( argc > 16 ){ embedded = ( *argv[16] == 'y' ? true : false ); }
47+
if ( argc > 17 ){ verbose = ( *argv[17] == 'y' ? true : false ); }
48+
if ( argc > 18 ){ const_pred = ( *argv[18] == 'y' ? true : false ); }
49+
if ( argc > 19 ){ parameterList = ( *argv[19] == 'y' ? true : false ); }
4850

4951
if ( verbose ) {
5052
std::cout << method << " " << dataFile << " lib " << lib << " pred "
5153
<< pred << " cols " << columns << " target " << target
5254
<< " E " << E << " Tp " << Tp << " tau " << tau
5355
<< " knn " << knn << " exclusionRadius " << exclusionRadius
5456
<< " theta " << theta
55-
<< " generateSteps " << generateSteps << std::endl;
57+
<< " generateSteps " << generateSteps
58+
<< " generateLibrary " << generateLibrary << std::endl;
5659
}
5760

5861
try {
@@ -85,6 +88,7 @@ int main( int argc, char *argv[] ) {
8588
verbose, // verbose
8689
std::vector<bool>(), // validLib
8790
generateSteps, // generateSteps
91+
generateLibrary, // generateLibrary
8892
parameterList ); // parameterList
8993

9094
dataFrame = S.predictions;
@@ -112,6 +116,7 @@ int main( int argc, char *argv[] ) {
112116
verbose, // verbose
113117
std::vector<bool>(), // validLib
114118
generateSteps, // generateSteps
119+
generateLibrary, // generateLibrary
115120
parameterList ); // parameterList
116121

117122

src/API.cc

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ SimplexValues Simplex( std::string pathIn,
197197
bool verbose,
198198
std::vector<bool> validLib,
199199
int generateSteps,
200+
bool generateLibrary,
200201
bool parameterList )
201202
{
202203
// DataFrame constructor loads data
@@ -220,6 +221,7 @@ SimplexValues Simplex( std::string pathIn,
220221
verbose,
221222
validLib,
222223
generateSteps,
224+
generateLibrary,
223225
parameterList );
224226

225227
return S;
@@ -245,6 +247,7 @@ SimplexValues Simplex( DataFrame< double > & DF,
245247
bool verbose,
246248
std::vector<bool> validLib,
247249
int generateSteps,
250+
bool generateLibrary,
248251
bool parameterList )
249252
{
250253
// Instantiate Parameters
@@ -254,7 +257,8 @@ SimplexValues Simplex( DataFrame< double > & DF,
254257
exclusionRadius,
255258
columns, target, embedded,
256259
const_predict, verbose, validLib,
257-
generateSteps, parameterList );
260+
generateSteps, generateLibrary,
261+
parameterList );
258262

259263
// Instantiate EDM::SimplexClass object
260264
SimplexClass SimplexModel = SimplexClass( DF, std::ref( parameters ) );
@@ -298,6 +302,7 @@ SMapValues SMap( std::string pathIn,
298302
bool verbose,
299303
std::vector<bool> validLib,
300304
int generateSteps,
305+
bool generateLibrary,
301306
bool parameterList )
302307
{
303308
// DataFrame constructor loads data
@@ -309,7 +314,8 @@ SMapValues SMap( std::string pathIn,
309314
exclusionRadius,
310315
columns, target, smapFile, derivatives,
311316
embedded, const_predict, verbose, validLib,
312-
generateSteps, parameterList );
317+
generateSteps, generateLibrary,
318+
parameterList );
313319
return SMapOutput;
314320
}
315321

@@ -337,6 +343,7 @@ SMapValues SMap( DataFrame< double > & DF,
337343
bool verbose,
338344
std::vector<bool> validLib,
339345
int generateSteps,
346+
bool generateLibrary,
340347
bool parameterList )
341348
{
342349
// Call overload 4) with default SVD function
@@ -346,7 +353,8 @@ SMapValues SMap( DataFrame< double > & DF,
346353
columns, target, smapFile, derivatives,
347354
& SVD, // LAPACK SVD default
348355
embedded, const_predict, verbose, validLib,
349-
generateSteps, parameterList );
356+
generateSteps, generateLibrary,
357+
parameterList );
350358

351359
return SMapOutput;
352360
}
@@ -377,6 +385,7 @@ SMapValues SMap( std::string pathIn,
377385
bool verbose,
378386
std::vector<bool> validLib,
379387
int generateSteps,
388+
bool generateLibrary,
380389
bool parameterList )
381390
{
382391
// DataFrame constructor loads data
@@ -388,7 +397,8 @@ SMapValues SMap( std::string pathIn,
388397
exclusionRadius,
389398
columns, target, smapFile, derivatives,
390399
solver, embedded, const_predict, verbose,
391-
validLib, generateSteps, parameterList );
400+
validLib, generateSteps, generateLibrary,
401+
parameterList );
392402
return SMapOutput;
393403
}
394404

@@ -417,6 +427,7 @@ SMapValues SMap( DataFrame< double > & DF,
417427
bool verbose,
418428
std::vector<bool> validLib,
419429
int generateSteps,
430+
bool generateLibrary,
420431
bool parameterList )
421432
{
422433
if ( derivatives.size() ) {} // -Wunused-parameter
@@ -427,7 +438,8 @@ SMapValues SMap( DataFrame< double > & DF,
427438
exclusionRadius,
428439
columns, target, embedded,
429440
const_predict, verbose, validLib,
430-
generateSteps, parameterList, smapFile );
441+
generateSteps, generateLibrary,
442+
parameterList, smapFile );
431443

432444
// Handle nan
433445
// If nan are found in library or prediction rows of columns or target,
@@ -592,6 +604,7 @@ CCMValues CCM( DataFrame< double > & DF,
592604
verbose, //
593605
std::vector<bool>(), // validLib
594606
0, // generateSteps
607+
false, // generateLibrary
595608
parameterList, //
596609
"", // SmapFile
597610
"", // blockFile
@@ -704,6 +717,7 @@ MultiviewValues Multiview( DataFrame< double > & DF,
704717
verbose, //
705718
std::vector<bool>(), // validLib
706719
0, // generateSteps
720+
false, // generateLibrary
707721
parameterList,//
708722
"", // SmapFile
709723
"", // blockFile

src/API.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ SimplexValues Simplex( std::string pathIn = "./data/",
5757
bool verbose = true,
5858
std::vector<bool> validLib = std::vector<bool>(),
5959
int generateSteps = 0,
60+
bool generateLibrary = false,
6061
bool parameterList = false );
6162

6263
SimplexValues Simplex( DataFrame< double > & dataFrameIn,
@@ -76,6 +77,7 @@ SimplexValues Simplex( DataFrame< double > & dataFrameIn,
7677
bool verbose = true,
7778
std::vector<bool> validLib = std::vector<bool>(),
7879
int generateSteps = 0,
80+
bool generateLibrary = false,
7981
bool parameterList = false );
8082

8183
// SMap is a special case since it can be called with a function pointer
@@ -103,6 +105,7 @@ SMapValues SMap( std::string pathIn = "./data/",
103105
bool verbose = true,
104106
std::vector<bool> validLib = std::vector<bool>(),
105107
int generateSteps = 0,
108+
bool generateLibrary = false,
106109
bool parameterList = false );
107110

108111
// 2) DataFrame with default SVD (LAPACK) assigned in Smap.cc 2)
@@ -126,6 +129,7 @@ SMapValues SMap( DataFrame< double > &dataFrameIn,
126129
bool verbose = true,
127130
std::vector<bool> validLib = std::vector<bool>(),
128131
int generateSteps = 0,
132+
bool generateLibrary = false,
129133
bool parameterList = false );
130134

131135
// 3) Data path/file with external solver object, init to default SVD
@@ -153,6 +157,7 @@ SMapValues SMap( std::string pathIn = "./data/",
153157
bool verbose = true,
154158
std::vector<bool> validLib = std::vector<bool>(),
155159
int generateSteps = 0,
160+
bool generateLibrary = false,
156161
bool parameterList = false );
157162

158163

@@ -180,6 +185,7 @@ SMapValues SMap( DataFrame< double > &dataFrameIn,
180185
bool verbose = true,
181186
std::vector<bool> validLib = std::vector<bool>(),
182187
int generateSteps = 0,
188+
bool generateLibrary = false,
183189
bool parameterList = false );
184190

185191
CCMValues CCM( std::string pathIn = "./data/",

src/Parameter.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Parameters::Parameters(
3232
std::vector<bool> validLib,
3333

3434
int generateSteps,
35+
bool generateLibrary,
3536
bool parameterList,
3637

3738
std::string SmapOutputFile,
@@ -76,6 +77,7 @@ Parameters::Parameters(
7677
validLib ( validLib ),
7778

7879
generateSteps ( generateSteps ),
80+
generateLibrary ( generateLibrary ),
7981
parameterList ( parameterList ),
8082

8183
SmapOutputFile ( SmapOutputFile ),
@@ -96,7 +98,7 @@ Parameters::Parameters(
9698
validated ( false ),
9799

98100
// Instantiate Version
99-
version( 1, 13, 1, "2022-07-01" )
101+
version( 1, 14, 0, "2023-01-07" )
100102
{
101103
// Constructor code
102104
if ( method != Method::None ) {
@@ -819,6 +821,10 @@ void Parameters::FillMap() {
819821
Map[ "generateSteps" ] = ss.str();
820822
ss.str( std::string() );
821823

824+
ss << generateLibrary;
825+
Map[ "generateLibrary" ] = ss.str();
826+
ss.str( std::string() );
827+
822828
ss << parameterList;
823829
Map[ "parameterList" ] = ss.str();
824830
ss.str( std::string() );

src/Parameter.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,23 @@ class Parameters {
3131
int E; // dimension
3232
int Tp; // prediction interval
3333
int knn; // k nearest neighbors
34-
int tau; // block embedding delay
35-
double theta; // S Map localization
34+
int tau; // embedding delay
35+
double theta; // S-Map localization
3636
int exclusionRadius; // temporal rows to ignore in predict
3737

38-
std::string columns_str;
39-
std::string target_str;
38+
std::string columns_str; // multi argument parameters
39+
std::string target_str; // argument parameter(s)
4040
std::vector< std::string > columnNames; // state-space column name(s)
4141
std::vector< std::string > targetNames; // target column name(s)
4242

43-
bool embedded; // true if data is already embedded/block
43+
bool embedded; // true if data is already embedded
4444
bool const_predict; // true to compute non "predictor" stats
4545
bool verbose;
4646

4747
std::vector<bool> validLib; // maps row to valid library flag
4848

4949
int generateSteps; // Number of timesteps to feedback generate
50+
bool generateLibrary; // Increment library with generated data
5051

5152
bool parameterList; // Add parameter list to output
5253

@@ -102,6 +103,7 @@ class Parameters {
102103
std::vector<bool> validLib = std::vector<bool>(),
103104

104105
int generateSteps = 0,
106+
bool generateLibrary = false,
105107
bool parameterList = false,
106108

107109
std::string SmapOutputFile = "",

src/SMap.cc

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,16 @@ void SMapClass::Generate( Solver solver ) {
180180
std::cout << " data.Time() end: " << data.Time().back() << std::endl;
181181
#endif
182182

183+
// Replace SMap object data with one containing only lib rows
184+
// -- The data becomes a data library from which predictions are generated
185+
// NOTE : JP Presume library starts at index 0 : Should be lib parameter
186+
std::vector<size_t> dataLibRows;
187+
for ( size_t i = 0; i <= parameters.library.back(); i++ ) {
188+
dataLibRows.push_back( i );
189+
}
190+
DataFrame<double> dataLib = data.DataFrameFromRowIndex( dataLibRows );
191+
this->data = dataLib; // JP is this a leak?
192+
183193
// Override prediction to have max( 2,Tp ) points at end of data.
184194
// We need Tp points if Tp > 1 to prevent nan gaps in prediction.
185195
// prediction & library are zero-offset in Parameters::Validate()
@@ -282,7 +292,9 @@ void SMapClass::Generate( Solver solver ) {
282292
generatedTime.push_back( newTime );
283293

284294
// 3) Increment library by adding another row index ------------
285-
parameters.library.push_back( parameters.library.back() + 1 );
295+
if ( parameters.generateLibrary ) {
296+
parameters.library.push_back( parameters.library.back() + 1 );
297+
}
286298

287299
// 4) Increment prediction indices -----------------------------
288300
for ( auto pi = parameters.prediction.begin();

src/Simplex.cc

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,17 @@ void SimplexClass::Generate() {
210210
std::cout << " data.Time() end: " << data.Time().back() << std::endl;
211211
#endif
212212

213+
// Replace Simplex object data with one containing only lib rows
214+
// -- The data becomes a data library from which predictions are generated
215+
// NOTE : JP Presume library starts at index 0 : Should be lib parameter
216+
std::vector<size_t> dataLibRows;
217+
for ( size_t i = 0; i <= parameters.library.back(); i++ ) {
218+
dataLibRows.push_back( i );
219+
}
220+
221+
DataFrame<double> dataLib = data.DataFrameFromRowIndex( dataLibRows );
222+
this->data = dataLib; // JP is this a leak?
223+
213224
// Override prediction to have max( 2,Tp ) points at end of data.
214225
// We need Tp points if Tp > 1 to prevent nan gaps in prediction.
215226
// prediction & library are zero-offset in Parameters::Validate()
@@ -302,7 +313,9 @@ void SimplexClass::Generate() {
302313
generatedTime.push_back( newTime );
303314

304315
// 3) Increment library by adding another row index ------------
305-
parameters.library.push_back( parameters.library.back() + 1 );
316+
if ( parameters.generateLibrary ) {
317+
parameters.library.push_back( parameters.library.back() + 1 );
318+
}
306319

307320
// 4) Increment prediction indices -----------------------------
308321
for ( auto pi = parameters.prediction.begin();

0 commit comments

Comments
 (0)