Skip to content

Commit c41f7f5

Browse files
v1.15.1 SMap Do not use BLAS on Windows
1 parent 10ad529 commit c41f7f5

6 files changed

Lines changed: 47 additions & 12 deletions

File tree

doc/cppEDM.pdf

1.43 KB
Binary file not shown.

src/API.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ DataFrame< double > PredictNonlinear( std::string pathIn = "./data/",
359359
bool verbose = true,
360360
std::vector<bool> validLib =
361361
std::vector<bool>(),
362+
bool ignoreNan = true,
362363
unsigned nThreads = 4 );
363364

364365
DataFrame< double > PredictNonlinear( DataFrame< double > & dataFrameIn,
@@ -378,5 +379,6 @@ DataFrame< double > PredictNonlinear( DataFrame< double > & dataFrameIn,
378379
bool verbose = true,
379380
std::vector<bool> validLib =
380381
std::vector<bool>(),
382+
bool ignoreNan = true,
381383
unsigned nThreads = 4 );
382384
#endif

src/Eval.cc

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ void SMapThread( EDM_Eval::WorkQueue &workQ,
7979
std::string target,
8080
bool embedded,
8181
bool verbose,
82-
std::vector<bool> validLib );
82+
std::vector<bool> validLib,
83+
bool ignoreNan );
8384

8485
//----------------------------------------------------------------
8586
// EmbedDimension() : Evaluate Simplex rho vs. dimension E
@@ -497,6 +498,7 @@ DataFrame< double > PredictNonlinear( std::string pathIn,
497498
bool embedded,
498499
bool verbose,
499500
std::vector<bool> validLib,
501+
bool ignoreNan,
500502
unsigned nThreads ) {
501503

502504
// Create DataFrame (constructor loads data)
@@ -518,6 +520,7 @@ DataFrame< double > PredictNonlinear( std::string pathIn,
518520
embedded,
519521
verbose,
520522
validLib,
523+
ignoreNan,
521524
nThreads );
522525
return Theta_rho;
523526
}
@@ -542,6 +545,7 @@ DataFrame< double > PredictNonlinear( DataFrame< double > & data,
542545
bool embedded,
543546
bool verbose,
544547
std::vector<bool> validLib,
548+
bool ignoreNan,
545549
unsigned nThreads ) {
546550

547551
std::vector<double> ThetaValues( { 0.01, 0.1, 0.3, 0.5, 0.75, 1,
@@ -600,7 +604,8 @@ DataFrame< double > PredictNonlinear( DataFrame< double > & data,
600604
target,
601605
embedded,
602606
verbose,
603-
validLib ) );
607+
validLib,
608+
ignoreNan ) );
604609
}
605610

606611
// join threads
@@ -647,7 +652,8 @@ void SMapThread( EDM_Eval::WorkQueue &workQ,
647652
std::string target,
648653
bool embedded,
649654
bool verbose,
650-
std::vector<bool> validLib )
655+
std::vector<bool> validLib,
656+
bool ignoreNan )
651657
{
652658
std::size_t i =
653659
std::atomic_fetch_add( &EDM_Eval::smap_count_i, std::size_t(1) );
@@ -679,7 +685,8 @@ void SMapThread( EDM_Eval::WorkQueue &workQ,
679685
embedded,
680686
false, // const_predict
681687
verbose,
682-
validLib );
688+
validLib,
689+
ignoreNan );
683690

684691
DataFrame< double > predictions = S.predictions;
685692
DataFrame< double > coefficients = S.coefficients;

src/Parameter.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ Parameters::Parameters(
102102
validated ( false ),
103103

104104
// Instantiate Version
105-
version( 1, 15, 0, "2023-10-21" )
105+
version( 1, 15, 1, "2023-10-27" )
106106
{
107107
// Constructor code
108108
if ( method != Method::None ) {
@@ -184,14 +184,15 @@ void Parameters::Validate() {
184184
if ( randomLib ) {
185185
if ( subSamples < 1 ) {
186186
std::string errMsg( "Parameters::Validate(): "
187-
"CCM samples must be > 0.\n" );
187+
"CCM sample must be > 0.\n" );
188188
throw std::runtime_error( errMsg );
189189
}
190190
}
191191

192192
// CCM librarySizes
193193
if ( not libSizes_str.size() ) {
194-
std::string errMsg( "Parameters::Validate(): CCM libSize empty.\n" );
194+
std::string errMsg( "Parameters::Validate(): "
195+
"CCM libSizes empty.\n" );
195196
throw std::runtime_error( errMsg );
196197
}
197198

src/SMap.cc

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,11 @@ void SMapClass::WriteOutput () {
490490
}
491491
}
492492

493+
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
494+
// Do not use LAPACK on Windog: use scikit-learn LinearRegression
495+
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
496+
#if !defined _WIN32 || defined USING_R
497+
493498
//----------------------------------------------------------------
494499
// Singular Value Decomposition : wrapper for Lapack_SVD()
495500
//----------------------------------------------------------------
@@ -504,11 +509,11 @@ SVDValues SVD( DataFrame < double > A,
504509

505510
double *b = &( B[0] );
506511

507-
SVDValues SVD_ = Lapack_SVD( A.NRows(), // number of rows
508-
A.NColumns(), // number of columns
509-
a, // A
510-
b, // b
511-
1.E-9 ); // rcond
512+
SVDValues SVD_ = Lapack_SVD( A.NRows(), // number of rows
513+
A.NColumns(), // number of columns
514+
a, // A
515+
b, // b
516+
1.E-9 ); // rcond
512517

513518
#ifdef DEBUG_ALL
514519
std::cout << "SVD------------------------\n";
@@ -657,3 +662,18 @@ SVDValues Lapack_SVD( int m, // rows in matrix
657662

658663
return SVD_;
659664
}
665+
#else
666+
//-----------------------------------------------------------------
667+
// Singular Value Decomposition : SVD() dummy function: Replaced by
668+
// scikit-learn LinearRegression on Windog. LAPACK is not feasible.
669+
//-----------------------------------------------------------------
670+
SVDValues SVD( DataFrame < double > A,
671+
std::valarray< double > B ) {
672+
if ( A.NRows() == B.size() ) {} // Avoid compiler unused warn
673+
SVDValues SVD_;
674+
return SVD_;
675+
}
676+
#endif
677+
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
678+
// Do not use LAPACK on Windog: use scikit-learn LinearRegression
679+
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

src/SMap.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,16 @@ using Solver = SVDValues (*) ( DataFrame < double >,
1111
// Prototype declaration of general functions
1212
SVDValues SVD( DataFrame < double > A, std::valarray< double > B );
1313

14+
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
15+
// Do not use LAPACK on Windog: use scikit-learn LinearRegression
16+
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
17+
#if !defined _WIN32 || defined USING_R
1418
SVDValues Lapack_SVD( int m, // number of rows in matrix
1519
int n, // number of columns in matrix
1620
double *a, // pointer to top-left corner
1721
double *b,
1822
double rcond );
23+
#endif
1924

2025
//----------------------------------------------------------------
2126
// SMap class inherits from EDM class and defines

0 commit comments

Comments
 (0)