1 //                                               -*- C++ -*-
2 /**
3  *  @brief ResourceMap defines top-most resourceMap strategies
4  *
5  *  Copyright 2005-2021 Airbus-EDF-IMACS-ONERA-Phimeca
6  *
7  *  This library is free software: you can redistribute it and/or modify
8  *  it under the terms of the GNU Lesser General Public License as published by
9  *  the Free Software Foundation, either version 3 of the License, or
10  *  (at your option) any later version.
11  *
12  *  This library is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU Lesser General Public License for more details.
16  *
17  *  You should have received a copy of the GNU Lesser General Public License
18  *  along with this library.  If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 #include <unistd.h>                 // for sysconf
22 #include "openturns/OTthread.hxx"
23 #include "openturns/OTconfig.hxx"
24 #include "openturns/OSS.hxx"
25 #include "openturns/ResourceMap.hxx"
26 #include "openturns/Exception.hxx"
27 #include "openturns/Path.hxx"
28 #include "openturns/Collection.hxx"
29 #include "openturns/XMLToolbox.hxx"
30 #ifdef OPENTURNS_HAVE_LIBXML2
31 #include <libxml/tree.h>
32 #endif
33 
34 BEGIN_NAMESPACE_OPENTURNS
35 
36 static const char * ConfigurationFileName = "openturns.conf";
37 #if defined OPENTURNS_HAVE_LIBXML2
38 static const char * RootElementName = "openturns-configuration";
39 static const char * XMLTag_value_str              = "value_str";
40 static const char * XMLTag_value_float            = "value_float";
41 static const char * XMLTag_value_int              = "value_int";
42 static const char * XMLTag_value_bool             = "value_bool";
43 #endif
44 
45 static pthread_mutex_t ResourceMap_InstanceMutex_;
46 static ResourceMap * ResourceMap_P_instance_ = 0;
47 static const ResourceMap_init static_initializer_ResourceMap;
48 
ResourceMap_init()49 ResourceMap_init::ResourceMap_init()
50 {
51   if (!ResourceMap_P_instance_)
52   {
53 #ifndef OT_MUTEXINIT_NOCHECK
54     pthread_mutexattr_t attr;
55     pthread_mutexattr_init( &attr);
56     pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
57     pthread_mutex_init(&ResourceMap_InstanceMutex_, &attr);
58 #else
59     pthread_mutex_init(&ResourceMap_InstanceMutex_, NULL);
60 #endif
61     ResourceMap_P_instance_ = new ResourceMap;
62   }
63   assert(ResourceMap_P_instance_);
64 }
65 
~ResourceMap_init()66 ResourceMap_init::~ResourceMap_init()
67 {
68   if (ResourceMap_P_instance_)
69     pthread_mutex_destroy(&ResourceMap_InstanceMutex_);
70   delete ResourceMap_P_instance_;
71   ResourceMap_P_instance_ = 0;
72 }
73 
74 
75 template<>
MutexLockSingleton(ResourceMap & singleton)76 MutexLockSingleton<ResourceMap>::MutexLockSingleton( ResourceMap & singleton )  throw()
77   : singleton_(singleton)
78   , lock_(ResourceMap_InstanceMutex_) {}
79 
80 
81 /* GetInstance gives a locked access to the singleton */
GetInstance()82 MutexLockSingleton<ResourceMap> ResourceMap::GetInstance()
83 {
84   static const ResourceMap_init force_instantiation;
85   // ResourceMap_InstanceMutex_ is always initialized
86   return *ResourceMap_P_instance_;
87 }
88 
89 /* Get the list of keys */
GetKeys()90 std::vector<String> ResourceMap::GetKeys()
91 {
92   return GetInstance().lock().getKeys();
93 }
94 
GetStringKeys()95 std::vector<String> ResourceMap::GetStringKeys()
96 {
97   return GetInstance().lock().getStringKeys();
98 }
99 
GetScalarKeys()100 std::vector<String> ResourceMap::GetScalarKeys()
101 {
102   return GetInstance().lock().getScalarKeys();
103 }
104 
GetUnsignedIntegerKeys()105 std::vector<String> ResourceMap::GetUnsignedIntegerKeys()
106 {
107   return GetInstance().lock().getUnsignedIntegerKeys();
108 }
109 
GetBoolKeys()110 std::vector<String> ResourceMap::GetBoolKeys()
111 {
112   return GetInstance().lock().getBoolKeys();
113 }
114 
115 /* Get a value in the map */
GetType(const String & key)116 String ResourceMap::GetType(const String & key)
117 {
118   return GetInstance().lock().getType(key);
119 }
120 
121 /* Get a value in the map */
Get(const String & key)122 String ResourceMap::Get(const String & key)
123 {
124   return GetInstance().lock().get(key);
125 }
126 
GetAsString(const String & key)127 String ResourceMap::GetAsString(const String & key)
128 {
129   return GetInstance().lock().getAsString(key);
130 }
131 
GetAsBool(const String & key)132 Bool ResourceMap::GetAsBool(const String & key)
133 {
134   return GetInstance().lock().getAsBool( key);
135 }
136 
GetAsUnsignedInteger(const String & key)137 UnsignedInteger ResourceMap::GetAsUnsignedInteger(const String & key)
138 {
139   return GetInstance().lock().getAsUnsignedInteger(key);
140 }
141 
GetAsScalar(const String & key)142 Scalar ResourceMap::GetAsScalar(const String & key)
143 {
144   return GetInstance().lock().getAsScalar(key);
145 }
146 
GetSize()147 UnsignedInteger ResourceMap::GetSize()
148 {
149   return GetInstance().lock().getSize();
150 }
151 
GetStringSize()152 UnsignedInteger ResourceMap::GetStringSize()
153 {
154   return GetInstance().lock().getStringSize();
155 }
156 
GetScalarSize()157 UnsignedInteger ResourceMap::GetScalarSize()
158 {
159   return GetInstance().lock().getScalarSize();
160 }
161 
GetUnsignedIntegerSize()162 UnsignedInteger ResourceMap::GetUnsignedIntegerSize()
163 {
164   return GetInstance().lock().getUnsignedIntegerSize();
165 }
166 
GetBoolSize()167 UnsignedInteger ResourceMap::GetBoolSize()
168 {
169   return GetInstance().lock().getBoolSize();
170 }
171 
172 /* Set a value in the map */
Set(const String & key,const String & value)173 void ResourceMap::Set(const String & key, const String & value)
174 {
175   GetInstance().lock().set(key, value);
176 }
177 
SetAsString(const String & key,const String & value)178 void ResourceMap::SetAsString(const String & key, const String & value)
179 {
180   GetInstance().lock().setAsString(key, value);
181 }
182 
SetAsBool(const String & key,const Bool value)183 void ResourceMap::SetAsBool(const String & key, const Bool value)
184 {
185   GetInstance().lock().setAsBool(key, value);
186 }
187 
SetAsUnsignedInteger(const String & key,const UnsignedInteger value)188 void ResourceMap::SetAsUnsignedInteger(const String & key, const UnsignedInteger value)
189 {
190   GetInstance().lock().setAsUnsignedInteger(key, value);
191 }
192 
SetAsScalar(const String & key,const Scalar value)193 void ResourceMap::SetAsScalar(const String & key, const Scalar value)
194 {
195   GetInstance().lock().setAsScalar(key, value);
196 }
197 
AddAsString(const String & key,const String & value)198 void ResourceMap::AddAsString(const String & key, const String & value)
199 {
200   GetInstance().lock().addAsString(key, value);
201 }
202 
AddAsBool(const String & key,const Bool value)203 void ResourceMap::AddAsBool(const String & key, const Bool value)
204 {
205   GetInstance().lock().addAsBool(key, value);
206 }
207 
AddAsUnsignedInteger(const String & key,const UnsignedInteger value)208 void ResourceMap::AddAsUnsignedInteger(const String & key, const UnsignedInteger value)
209 {
210   GetInstance().lock().addAsUnsignedInteger(key, value);
211 }
212 
AddAsScalar(const String & key,const Scalar value)213 void ResourceMap::AddAsScalar(const String & key, const Scalar value)
214 {
215   GetInstance().lock().addAsScalar(key, value);
216 }
217 
HasKey(const String & key)218 Bool ResourceMap::HasKey(const String & key)
219 {
220   return GetInstance().lock().hasKey(key);
221 }
222 
Reload()223 void ResourceMap::Reload()
224 {
225   return GetInstance().lock().reload();
226 }
227 
RemoveKey(const String & key)228 void ResourceMap::RemoveKey(const String & key)
229 {
230   GetInstance().lock().removeKey(key);
231 }
232 
FindKeys(const String & substr)233 std::vector<String> ResourceMap::FindKeys(const String & substr)
234 {
235   return GetInstance().lock().findKeys(substr);
236 }
237 
238 /* Default constructor */
ResourceMap()239 ResourceMap::ResourceMap()
240   : mapString_()
241   , mapScalar_()
242   , mapUnsignedInteger_()
243   , mapBool_()
244 {
245   reload();
246 }
247 
248 /* Method for retrieving information from the resource map */
getType(const String & key) const249 String ResourceMap::getType(const String & key) const
250 {
251   // First, try to retrieve the value from the String map
252   {
253     Collection<String> keys;
254     for (MapStringType::const_iterator it = mapString_.begin(); it != mapString_.end(); ++it)
255     {
256       keys.add(it->first);
257     }
258     MapStringType::const_iterator it = mapString_.find(key);
259     if (it != mapString_.end()) return "str";
260   }
261   // Second, try to retrieve the value from the Scalar map
262   {
263     Collection<String> keys;
264     for (MapScalarType::const_iterator it = mapScalar_.begin(); it != mapScalar_.end(); ++it)
265     {
266       keys.add(it->first);
267     }
268     MapScalarType::const_iterator it = mapScalar_.find(key);
269     if (it != mapScalar_.end()) return "float";
270   }
271   // Third, try to retrieve the value from the UnsignedInteger map
272   {
273     Collection<String> keys;
274     for (MapUnsignedIntegerType::const_iterator it = mapUnsignedInteger_.begin(); it != mapUnsignedInteger_.end(); ++it)
275     {
276       keys.add(it->first);
277     }
278     MapUnsignedIntegerType::const_iterator it = mapUnsignedInteger_.find(key);
279     if (it != mapUnsignedInteger_.end()) return "int";
280   }
281   // Fourth, try to retrieve the value from the Bool map
282   {
283     Collection<String> keys;
284     for (MapBoolType::const_iterator it = mapBool_.begin(); it != mapBool_.end(); ++it)
285     {
286       keys.add(it->first);
287     }
288     MapBoolType::const_iterator it = mapBool_.find(key);
289     if (it != mapBool_.end()) return "bool";
290   }
291   throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap.";
292 }
293 
get(const String & key) const294 String ResourceMap::get(const String & key) const
295 {
296   // First, try to retrieve the value from the String map
297   {
298     MapStringType::const_iterator it = mapString_.find(key);
299     if (it != mapString_.end()) return it->second;
300   }
301   // Second, try to retrieve the value from the Scalar map
302   {
303     MapScalarType::const_iterator it = mapScalar_.find(key);
304     if (it != mapScalar_.end()) return (OSS() << it->second);
305   }
306   // Third, try to retrieve the value from the UnsignedInteger map
307   {
308     MapUnsignedIntegerType::const_iterator it = mapUnsignedInteger_.find(key);
309     if (it != mapUnsignedInteger_.end()) return (OSS() << it->second);
310   }
311   // Fourth, try to retrieve the value from the Bool map
312   {
313     MapBoolType::const_iterator it = mapBool_.find(key);
314     if (it != mapBool_.end()) return (OSS() << it->second);
315   }
316   throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap.";
317 }
318 
hasKey(const String & key) const319 Bool ResourceMap::hasKey(const String & key) const
320 {
321   return ((mapString_.find(key) != mapString_.end())
322           || (mapScalar_.find(key) != mapScalar_.end())
323           || (mapUnsignedInteger_.find(key) != mapUnsignedInteger_.end())
324           || (mapBool_.find(key) != mapBool_.end()));
325 }
326 
removeKey(const String & key)327 void ResourceMap::removeKey(const String & key)
328 {
329   if (!hasKey(key))
330     throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap";
331 
332   String keyType(getType(key));
333   if (keyType == "str")
334     mapString_.erase(mapString_.find(key));
335   if (keyType == "float")
336     mapScalar_.erase(mapScalar_.find(key));
337   if (keyType == "int")
338     mapUnsignedInteger_.erase(mapUnsignedInteger_.find(key));
339   if (keyType == "bool")
340     mapBool_.erase(mapBool_.find(key));
341 }
342 
getAsString(const String & key) const343 String ResourceMap::getAsString(const String & key) const
344 {
345   MapStringType::const_iterator it = mapString_.find(key);
346   if (it != mapString_.end()) return it->second;
347   throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as a String.";
348 }
349 
getAsScalar(const String & key) const350 Scalar ResourceMap::getAsScalar(const String & key) const
351 {
352   MapScalarType::const_iterator it = mapScalar_.find(key);
353   if (it != mapScalar_.end()) return it->second;
354   throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as a Scalar.";
355 }
356 
getAsUnsignedInteger(const String & key) const357 UnsignedInteger ResourceMap::getAsUnsignedInteger(const String & key) const
358 {
359   MapUnsignedIntegerType::const_iterator it = mapUnsignedInteger_.find(key);
360   if (it != mapUnsignedInteger_.end()) return it->second;
361   throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as an UnsignedInteger.";
362 }
363 
getAsBool(const String & key) const364 Bool ResourceMap::getAsBool(const String & key) const
365 {
366   MapBoolType::const_iterator it = mapBool_.find(key);
367   if (it != mapBool_.end()) return it->second;
368   throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as a Bool.";
369 }
370 
371 /* Get the size of the map */
getSize() const372 UnsignedInteger ResourceMap::getSize() const
373 {
374   return getStringSize() + getScalarSize() + getUnsignedIntegerSize() + getBoolSize();
375 }
376 
getStringSize() const377 UnsignedInteger ResourceMap::getStringSize() const
378 {
379   return mapString_.size();
380 }
381 
getScalarSize() const382 UnsignedInteger ResourceMap::getScalarSize() const
383 {
384   return mapScalar_.size();
385 }
386 
getUnsignedIntegerSize() const387 UnsignedInteger ResourceMap::getUnsignedIntegerSize() const
388 {
389   return mapUnsignedInteger_.size();
390 }
391 
getBoolSize() const392 UnsignedInteger ResourceMap::getBoolSize() const
393 {
394   return mapBool_.size();
395 }
396 
397 /* Method for setting information into the resource map */
set(const String & key,const String & value)398 void ResourceMap::set(const String & key, const String & value)
399 {
400   // First, check if the given key is already defined in one of the maps
401   // to convert it to the correct type
402   // First, try to retrieve the value from the String map
403   {
404     MapStringType::iterator it = mapString_.find(key);
405     if (it != mapString_.end())
406     {
407       it->second = value;
408       return;
409     }
410   }
411   // Second, try to retrieve the value from the Scalar map
412   {
413     MapScalarType::iterator it = mapScalar_.find(key);
414     if (it != mapScalar_.end())
415     {
416       Scalar scalarValue = -1.0;
417       std::istringstream iss(value);
418       iss >> scalarValue;
419       it->second = scalarValue;
420       return;
421     }
422   }
423   // Third, try to retrieve the value from the UnsignedInteger map
424   {
425     MapUnsignedIntegerType::iterator it = mapUnsignedInteger_.find(key);
426     if (it != mapUnsignedInteger_.end())
427     {
428       UnsignedInteger unsignedIntegerValue = 0;
429       std::istringstream iss(value);
430       iss >> unsignedIntegerValue;
431       it->second = unsignedIntegerValue;
432       return;
433     }
434   }
435   // Fourth, try to retrieve the value from the Bool map
436   {
437     MapBoolType::iterator it = mapBool_.find(key);
438     if (it != mapBool_.end())
439     {
440       Bool boolValue = false;
441       // First, try to recover the bool value from the "true" or "false" strings
442       if (value == "true") boolValue = true;
443       else if (value == "false") boolValue = false;
444       // Second, try to recover the bool from the litteral value
445       else
446       {
447         std::istringstream iss(value);
448         iss >> boolValue;
449       }
450       it->second = boolValue;
451     }
452   }
453   throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap.";
454 }
455 
setAsString(const String & key,const String & value)456 void ResourceMap::setAsString(const String & key, const String & value)
457 {
458   MapStringType::iterator it = mapString_.find(key);
459   if (it == mapString_.end())
460     throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as a String.";
461   it->second = value;
462 }
463 
setAsBool(const String & key,const Bool value)464 void ResourceMap::setAsBool(const String & key, const Bool value)
465 {
466   MapBoolType::iterator it = mapBool_.find(key);
467   if (it == mapBool_.end())
468     throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as a Bool.";
469   it->second = value;
470 }
471 
setAsUnsignedInteger(const String & key,const UnsignedInteger value)472 void ResourceMap::setAsUnsignedInteger(const String & key, const UnsignedInteger value)
473 {
474   MapUnsignedIntegerType::iterator it = mapUnsignedInteger_.find(key);
475   if (it == mapUnsignedInteger_.end())
476     throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as an UnsignedInteger.";
477   it->second = value;
478 }
479 
setAsScalar(const String & key,const Scalar value)480 void ResourceMap::setAsScalar(const String & key, const Scalar value)
481 {
482   MapScalarType::iterator it = mapScalar_.find(key);
483   if (it == mapScalar_.end())
484     throw InternalException(HERE) << "Key '" << key << "' is missing in ResourceMap as a Scalar.";
485   it->second = value;
486 }
487 
addAsString(const String & key,const String & value)488 void ResourceMap::addAsString(const String & key, const String & value)
489 {
490   if (mapString_.find(key) != mapString_.end())
491     throw InternalException(HERE) << "Key '" << key << "' is already in ResourceMap as a String.";
492   mapString_[key] = value;
493 }
494 
addAsBool(const String & key,const Bool value)495 void ResourceMap::addAsBool(const String & key, const Bool value)
496 {
497   if (mapBool_.find(key) != mapBool_.end())
498     throw InternalException(HERE) << "Key '" << key << "' is already in ResourceMap as a Bool.";
499   mapBool_[key] = value;
500 }
501 
addAsUnsignedInteger(const String & key,const UnsignedInteger value)502 void ResourceMap::addAsUnsignedInteger(const String & key, const UnsignedInteger value)
503 {
504   if (mapUnsignedInteger_.find(key) != mapUnsignedInteger_.end())
505     throw InternalException(HERE) << "Key '" << key << "' is already in ResourceMap as an UnsignedInteger.";
506   mapUnsignedInteger_[key] = value;
507 }
508 
addAsScalar(const String & key,const Scalar value)509 void ResourceMap::addAsScalar(const String & key, const Scalar value)
510 {
511   if (mapScalar_.find(key) != mapScalar_.end())
512     throw InternalException(HERE) << "Key '" << key << "' is already in ResourceMap as a Scalar.";
513   mapScalar_[key] = value;
514 }
515 
516 /* Update the ResourceMap with information from the configuration file */
readConfigurationFile(const FileName & configurationFile)517 void ResourceMap::readConfigurationFile(const FileName & configurationFile)
518 {
519 #if defined OPENTURNS_HAVE_LIBXML2
520   LOGINFO(OSS() << "Using configuration file " << configurationFile);
521 
522   // Open the configuration file and load it in a DOM document for later analysis
523   XMLDoc document(configurationFile);
524 
525   // Check it is an OpenTURNS' one
526   xmlNodePtr rootElt = xmlDocGetRootElement(document);
527   if (rootElt == NULL) throw ConfigurationFileParsingException(HERE) << "Wrapper file has no root element" << configurationFile;
528   if (xmlStrcmp(rootElt->name, reinterpret_cast<const xmlChar *>(RootElementName)))
529     throw ConfigurationFileParsingException(HERE) << "Wrapper file " << configurationFile
530         << " has an invalid root element (" << rootElt->name << ")"
531         << " at line " << xmlGetLineNo(rootElt);
532 
533 
534   // Walk through the DOM document to read the data
535   if (rootElt && rootElt->children)
536   {
537     for (xmlNodePtr current = rootElt->children; current; current = current->next)
538     {
539       if (XML::IsElement(current))
540       {
541         const String key = XML::ToString(current->name);
542         // Try to get a String value
543         {
544           String value = XML::GetAttributeByName(current, XMLTag_value_str);
545           if (value.size() > 0)
546           {
547             mapString_[key] = value;
548             break;
549           }
550         } // String
551         // Try to get a Scalar value
552         {
553           String value = XML::GetAttributeByName(current, XMLTag_value_float);
554           if (value.size() > 0)
555           {
556             Scalar scalarValue = -1.0;
557             std::istringstream iss(value);
558             iss >> scalarValue;
559             mapScalar_[key] = scalarValue;
560             break;
561           }
562         } // Scalar
563         // Try to get an UnsignedInteger value
564         {
565           String value = XML::GetAttributeByName(current, XMLTag_value_int);
566           if (value.size() > 0)
567           {
568             UnsignedInteger unsignedIntegerValue = 0;
569             std::istringstream iss(value);
570             iss >> unsignedIntegerValue;
571             mapUnsignedInteger_[key] = unsignedIntegerValue;
572             break;
573           }
574         } // UnsignedInteger
575         // Try to get a Bool value
576         {
577           String value = XML::GetAttributeByName( current, XMLTag_value_bool);
578           if (value.size() > 0)
579           {
580             Bool boolValue = false;
581             // First, try to recover the bool value from the "true" or "false" strings
582             if (value == "true") boolValue = true;
583             else if (value == "false") boolValue = false;
584             // Second, try to recover the bool from the litteral value
585             else
586             {
587               std::istringstream iss(value);
588               iss >> boolValue;
589             }
590             mapBool_[key] = boolValue;
591             break;
592           }
593         } // Bool
594       } // if XML::IsElement
595     } // for xmlNodePtr
596   } // if root
597 #else
598   (void)configurationFile;
599   LOGWARN(OSS() << "Cannot parse configuration file due to lacking xml support");
600 #endif
601 }
602 
603 
604 /* Find the configuration file in specific path (see Path class for algorithm) */
findConfigurationFile() const605 FileName ResourceMap::findConfigurationFile() const
606 {
607   Path::DirectoryList dirList = Path::GetConfigDirectoryList();
608   return Path::FindFileByNameInDirectoryList(ConfigurationFileName, dirList);
609 }
610 
611 /* Load the configuration file */
loadConfigurationFile()612 void ResourceMap::loadConfigurationFile()
613 {
614   try
615   {
616     readConfigurationFile(findConfigurationFile());
617   }
618   catch (FileNotFoundException &)
619   {
620     LOGWARN(OSS() << "The configuration file has not been found, using default parameters.");
621   }
622 }
623 
624 /* Load the configuration defined at installation time */
loadDefaultConfiguration()625 void ResourceMap::loadDefaultConfiguration()
626 {
627 #ifndef _WIN32
628   addAsString("Path-TemporaryDirectory", "/tmp");
629   addAsUnsignedInteger("TBB-ThreadsNumber", sysconf(_SC_NPROCESSORS_CONF));
630 #else
631   addAsString("Path-TemporaryDirectory", "TEMP");
632   UnsignedInteger numberOfProcessors = 0;
633   std::istringstream iss(getenv("NUMBER_OF_PROCESSORS"));
634   iss >> numberOfProcessors;
635   addAsUnsignedInteger("TBB-ThreadsNumber", numberOfProcessors);
636 #endif
637   if (const char* env_num_threads = std::getenv("OPENTURNS_NUM_THREADS"))
638   {
639     try
640     {
641       setAsUnsignedInteger("TBB-ThreadsNumber", std::stoi(env_num_threads));
642     }
643     catch (const std::invalid_argument &)
644     {
645       throw InternalException(HERE) << "OPENTURNS_NUM_THREADS must be an integer, got " << env_num_threads;
646     }
647   }
648   addAsUnsignedInteger("Cache-MaxSize", 1024);
649 
650   // Os parameters
651   addAsBool("Os-CreateProcess", "false");
652   addAsBool("Os-RemoveFiles", "true");
653   addAsUnsignedInteger("OS-DeleteTimeout", 2);
654 
655   // XMLStorageManager parameters
656   addAsUnsignedInteger("XMLStorageManager-DefaultCompressionLevel", 0);
657 
658   // Collection parameters
659   addAsUnsignedInteger("Collection-size-visible-in-str-from", 10);
660 
661   // SpecFunc parameters
662   addAsScalar("SpecFunc-Precision", 2.0e-16);
663   addAsUnsignedInteger("SpecFunc-MaximumIteration", 1000);
664 
665   // SymbolicParser parameters
666   addAsString("SymbolicParser-Backend", SYMBOLICPARSER_DEFAULT_BACKEND);
667 
668   // DesignProxy parameters
669   addAsUnsignedInteger("DesignProxy-DefaultCacheSize", 16777216);// 2^24=16777216=128 Mio
670 
671   // KFold parameters
672   addAsUnsignedInteger("KFold-DefaultK", 10);
673 
674   // KFold parameters
675   addAsBool("KFoldSplitter-Randomize", false);
676 
677   // BlendedStep parameters //
678   addAsScalar("BlendedStep-DefaultEta", 1.0);
679 
680   // CenteredFiniteDifferenceGradient parameters //
681   addAsScalar("CenteredFiniteDifferenceGradient-DefaultEpsilon", 1.0e-5);
682 
683   // CenteredFiniteDifferenceHessian parameters //
684   addAsScalar("CenteredFiniteDifferenceHessian-DefaultEpsilon", 1.0e-4);
685 
686   // NonCenteredFiniteDifferenceGradient parameters //
687   addAsScalar("NonCenteredFiniteDifferenceGradient-DefaultEpsilon", 1.0e-7);
688 
689   // PiecewiseHermiteEvaluation parameters //
690   addAsScalar("PiecewiseHermiteEvaluation-EpsilonRegular", 1.0e-12);
691 
692   // PiecewiseLinearEvaluation parameters //
693   addAsScalar("PiecewiseLinearEvaluation-EpsilonRegular", 1.0e-12);
694 
695   // UniVariatePolynomialImplementation parameters //
696   addAsUnsignedInteger("UniVariatePolynomial-SmallDegree", 400);
697 
698   // Pie parameters //
699   addAsScalar("Pie-HorizontalMargin", 0.3);
700   addAsScalar("Pie-LabelThreshold", 0.02);
701   addAsScalar("Pie-VerticalMargin", 0.1);
702 
703   // DrawableImplementation parameters //
704   addAsScalar("Drawable-DefaultLineWidth", 1.0);
705   addAsString("Drawable-AlternativePattern", "S");
706   addAsString("Drawable-DefaultColor", "blue");
707   addAsString("Drawable-DefaultFillStyle", "solid");
708   addAsString("Drawable-DefaultLineStyle", "solid");
709   addAsString("Drawable-DefaultPaletteName", "Tableau");
710   addAsString("Drawable-DefaultPattern", "s");
711   addAsString("Drawable-DefaultPointStyle", "plus");
712   addAsString("Drawable-DefaultSurfaceColor", "white");
713   addAsString("Drawable-NoSpecifiedLabel", "");
714   addAsUnsignedInteger("Drawable-DataThreshold", 2000);
715   addAsUnsignedInteger("Drawable-DefaultPalettePhase", 12);
716 
717   // Text drawable
718   addAsScalar("Text-DefaultTextSize", 0.75);
719 
720   // GraphImplementation parameters //
721 #ifdef R_EXECUTABLE
722   addAsString("Graph-RExecutableCommand", R_EXECUTABLE);
723 #else
724   addAsString("Graph-RExecutableCommand", "");
725 #endif
726   addAsScalar("Graph-DefaultHorizontalMargin", 0.05);
727   addAsScalar("Graph-DefaultLegendFontSize", 1.0);
728   addAsScalar("Graph-DefaultVerticalMargin", 0.05);
729   addAsString("Graph-NoSpecifiedLabel", "");
730   addAsUnsignedInteger("Graph-DefaultHeight", 480);
731   addAsUnsignedInteger("Graph-DefaultWidth", 640);
732 
733   // Contour parameters //
734   addAsUnsignedInteger("Contour-DefaultLevelsNumber", 10);
735 
736   // IntervalMesher parameters //
737   addAsBool("IntervalMesher-UseDiamond", false);
738 
739   // PointToPointEvaluation parameters //
740   addAsUnsignedInteger("PointToPointEvaluation-BlockSize", 256);
741 
742   // FieldToPointConnection parameters //
743   addAsUnsignedInteger("FieldToPointConnection-BlockSize", 256);
744 
745   // SQP parameters //
746   addAsScalar("SQP-DefaultOmega", 1.0e-4);
747   addAsScalar("SQP-DefaultSmooth", 1.2);
748   addAsScalar("SQP-DefaultTau", 0.5);
749 
750   // TNC parameters //
751   addAsScalar("TNC-DefaultAccuracy", 1.0e-4);
752   addAsScalar("TNC-DefaultEta", 0.25);
753   addAsScalar("TNC-DefaultFmin", 1.0);
754   addAsScalar("TNC-DefaultRescale", 1.3);
755   addAsScalar("TNC-DefaultStepmx", 10.0);
756   addAsUnsignedInteger("TNC-DefaultMaxCGit", 50);
757 
758   // AbdoRackwitz parameters //
759   addAsScalar("AbdoRackwitz-DefaultOmega", 1.0e-4);
760   addAsScalar("AbdoRackwitz-DefaultSmooth", 1.2);
761   addAsScalar("AbdoRackwitz-DefaultTau", 0.5);
762 
763   // MultiStart parameters //
764   addAsBool("MultiStart-KeepResults", true);
765 
766   // OptimizationAlgorithm parameters //
767   addAsScalar("OptimizationAlgorithm-DefaultLevelValue", 0.0);
768   addAsScalar("OptimizationAlgorithm-DefaultMaximumAbsoluteError", 1.0e-5);
769   addAsScalar("OptimizationAlgorithm-DefaultMaximumConstraintError", 1.0e-5);
770   addAsScalar("OptimizationAlgorithm-DefaultMaximumRelativeError", 1.0e-5);
771   addAsScalar("OptimizationAlgorithm-DefaultMaximumResidualError", 1.0e-5);
772   addAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumEvaluationNumber", 1000);
773   addAsUnsignedInteger("OptimizationAlgorithm-DefaultMaximumIterationNumber", 100);
774 
775   // Dlib optimization parameters //
776   addAsScalar("Dlib-DefaultInitialTrustRegionRadius", 1.0);
777   addAsScalar("Dlib-DefaultWolfeRho", 0.01);
778   addAsScalar("Dlib-DefaultWolfeSigma", 0.9);
779   addAsUnsignedInteger("Dlib-DefaultMaxLineSearchIterations", 100);
780   addAsUnsignedInteger("Dlib-DefaultMaxSize", 10);
781 
782 
783   // EfficientGlobalOptimization parameters //
784   addAsScalar("EfficientGlobalOptimization-DefaultAEITradeoff", 1.0);
785   addAsScalar("EfficientGlobalOptimization-DefaultCorrelationLengthFactor", 1.0);
786   addAsScalar("EfficientGlobalOptimization-DefaultImprovementFactor", 0.0);
787   addAsUnsignedInteger("EfficientGlobalOptimization-DefaultMultiStartExperimentSize", 100);
788   addAsUnsignedInteger("EfficientGlobalOptimization-DefaultMultiStartNumber", 20);
789   addAsUnsignedInteger("EfficientGlobalOptimization-DefaultParameterEstimationPeriod", 1);
790 
791   // Cobyla parameters //
792   addAsScalar("Cobyla-DefaultRhoBeg", 0.1);
793 
794   // SolverImplementation parameters //
795   addAsScalar("Solver-DefaultAbsoluteError",  1.0e-5);
796   addAsScalar("Solver-DefaultRelativeError",  1.0e-5);
797   addAsScalar("Solver-DefaultResidualError",  0.0   );
798   addAsUnsignedInteger("Solver-DefaultMaximumFunctionEvaluation", 100);
799 
800   // GaussKronrod parameters //
801   addAsScalar("GaussKronrod-MaximumError",  1.0e-12);
802   addAsUnsignedInteger("GaussKronrod-MaximumSubIntervals", 100);
803 
804   // GaussLegendre parameters //
805   addAsUnsignedInteger("GaussLegendre-DefaultMarginalIntegrationPointsNumber", 64);
806 
807   // FejerAlgorithm parameters //
808   addAsUnsignedInteger("FejerAlgorithm-DefaultMarginalIntegrationPointsNumber", 64);
809 
810   // IteratedQuadrature parameters //
811   addAsScalar("IteratedQuadrature-MaximumError",    1.0e-7);
812   addAsUnsignedInteger("IteratedQuadrature-MaximumSubIntervals", 32);
813 
814   // Fehlberg parameters //
815   addAsScalar("Fehlberg-InitialStep", 1.0e-7);
816   addAsScalar("Fehlberg-LocalPrecision", 1.0e-10);
817   addAsScalar("Fehlberg-MinimalStep", 1.0e-7);
818   addAsUnsignedInteger("Fehlberg-DefaultOrder", 4);
819 
820   // KarhunenLoeveQuadratureAlgorithm parameters //
821   addAsScalar("KarhunenLoeveQuadratureAlgorithm-RegularizationFactor", 0.0);
822 
823   // KarhunenLoeveSVDAlgorithm parameters //
824   addAsBool("KarhunenLoeveSVDAlgorithm-UseRandomSVD", false);
825   addAsString("KarhunenLoeveSVDAlgorithm-RandomSVDVariant", "Halko2010");
826   addAsUnsignedInteger("KarhunenLoeveSVDAlgorithm-Halko2011Margin", 2);
827   addAsUnsignedInteger("KarhunenLoeveSVDAlgorithm-Halko2011Iterations", 2);
828   addAsUnsignedInteger("KarhunenLoeveSVDAlgorithm-RandomSVDMaximumRank", 1000);
829 
830   // KarhunenLoeveP1Algorithm parameters //
831   addAsScalar("KarhunenLoeveP1Algorithm-RegularizationFactor", 0.0);
832   addAsString("KarhunenLoeveP1Algorithm-CovarianceMatrixStorage", "DENSE");
833   addAsString("KarhunenLoeveP1Algorithm-EigenvaluesSolver", "LAPACK");
834 
835   // AdaptiveStieltjesAlgorithm parameters //
836   addAsScalar("AdaptiveStieltjesAlgorithm-MaximumError",  1.0e-12);
837   addAsUnsignedInteger("AdaptiveStieltjesAlgorithm-MaximumSubIntervalsBetweenRoots", 64);
838 
839   // LinearModelTest parameters //
840   addAsScalar("LinearModelTest-DefaultHarrisonMcCabeBreakpoint", 0.5);
841   addAsScalar("LinearModelTest-DefaultLevel", 0.05);
842   addAsString("LinearModelTest-DefaultDurbinWatsonHypothesis", "Equal");
843   addAsUnsignedInteger("LinearModelTest-DefaultHarrisonMcCabeSimulationSize", 1000);
844 
845   // Last parameters //
846   addAsUnsignedInteger("Last-DefaultMaximumSize", 65536);
847 
848   // Compact parameters //
849   addAsUnsignedInteger("Compact-DefaultHalfMaximumSize", 1024);
850 
851   // FaureSequence parameters //
852   addAsUnsignedInteger("FaureSequence-InitialSeed", 1);
853 
854   // HaltonSequence parameters //
855   addAsString("HaltonSequence-Scrambling", "NONE");
856   addAsUnsignedInteger("HaltonSequence-InitialSeed", 1);
857 
858   // HaselgroveSequence parameters //
859   addAsUnsignedInteger("HaselgroveSequence-InitialSeed", 1);
860 
861   // LowDiscrepancySequence parameters //
862   addAsUnsignedInteger("LowDiscrepancySequence-ScramblingSeed", 0);
863 
864   // ReverseHaltonSequence parameters //
865   addAsUnsignedInteger("ReverseHaltonSequence-InitialSeed", 1);
866 
867   // SobolSequence parameters //
868   addAsUnsignedInteger("SobolSequence-InitialSeed", 1);
869 
870   // SobolIndicesExperiment parameters //
871   addAsString("SobolIndicesExperiment-SamplingMethod", "MonteCarlo");
872 
873   // SobolIndicesAlgorithm parameters //
874   addAsBool("SobolIndicesAlgorithm-DefaultUseAsymptoticDistribution", false);
875   addAsScalar("SobolIndicesAlgorithm-DefaultBootstrapConfidenceLevel", 0.95);
876   addAsUnsignedInteger("SobolIndicesAlgorithm-DefaultBlockSize", 1);
877   addAsUnsignedInteger("SobolIndicesAlgorithm-DefaultBootstrapSize", 100);
878 
879   // FAST parameters //
880   addAsUnsignedInteger("FAST-DefaultInterferenceFactor", 4);
881   addAsUnsignedInteger("FAST-DefaultResamplingSize", 1);
882 
883   // RandomGenerator parameters //
884   addAsUnsignedInteger("RandomGenerator-InitialSeed", 0);
885 
886   // CovarianceModelImplementation parameters //
887   addAsScalar("CovarianceModel-DefaultNuggetFactor", 1e-12);
888   addAsScalar("CovarianceModel-DefaultTMax",  5.0);
889   addAsScalar("CovarianceModel-DefaultTMin", -5.0);
890   addAsUnsignedInteger("CovarianceModel-DefaultPointNumber",  129);
891 
892   // SpectralModel parameters //
893   addAsScalar("SpectralModel-DefaultMaximumFrequency",  5.0);
894   addAsScalar("SpectralModel-DefaultMinimumFrequency", -5.0);
895   addAsUnsignedInteger("SpectralModel-DefaultFrequencyNumber",  129);
896 
897   // FieldImplementation parameters //
898   addAsBool("Field-AutomaticScaling", true);
899   addAsScalar("Field-ArrowRatio", 0.01);
900   addAsScalar("Field-ArrowScaling", 1.0);
901   addAsUnsignedInteger("Field-LevelNumber", 30);
902 
903   // SampleImplementation parameters
904   addAsString("Sample-CSVFileSeparator", ";");
905   addAsString("Sample-CommentMarkers", "#");
906   addAsUnsignedInteger("Sample-PrintEllipsisSize", 3);
907   addAsUnsignedInteger("Sample-PrintEllipsisThreshold", 1000);
908   addAsUnsignedInteger("Sample-SmallKendallTau", 23);
909 
910   // DomainImplementation parameters
911   addAsScalar("Domain-SmallVolume",   1.0e-12);
912 
913   // Mesh parameters
914   addAsBool("Mesh-BackfaceCulling", false);
915   addAsScalar("Mesh-AmbientFactor", 0.1);
916   addAsScalar("Mesh-DiffuseFactor", 0.7);
917   addAsScalar("Mesh-Shininess", 100.0);
918   addAsScalar("Mesh-SpecularFactor", 0.2);
919   addAsScalar("Mesh-VertexEpsilon", 1.0e-6);
920   addAsScalar("Mesh-CoordinateEpsilon", 1.0e-14);
921   addAsUnsignedInteger("Mesh-LargeSize", 5000);
922   addAsBool("Mesh-CheckValidity", false);
923 
924   // BoundingVolumeHierarchy parameters
925   addAsString("BoundingVolumeHierarchy-Strategy", "Mean");
926   addAsUnsignedInteger("BoundingVolumeHierarchy-BinNumber", 50);
927 
928   // EnclosingSimplexAlgorithm parameters
929   addAsUnsignedInteger("EnclosingSimplexAlgorithm-LargeDimension", 5);
930 
931   // Matrix parameters
932   addAsUnsignedInteger("Matrix-size-visible-in-str-from", 5);
933 
934   // Tensor parameters
935   addAsUnsignedInteger("Tensor-size-visible-in-str-from", 5);
936 
937   // Tensor parameters
938   addAsUnsignedInteger("ComplexTensor-size-visible-in-str-from", 6);
939 
940   // MatrixImplementation parameters //
941   addAsScalar("Matrix-DefaultSmallPivot", 1.0e-7 );
942   addAsScalar("Matrix-LargestEigenValueRelativeError", 1.0e-4);
943   addAsScalar("Matrix-SymmetryThreshold", 1.0e-12);
944   addAsUnsignedInteger("Matrix-LargestEigenValueIterations", 50);
945 
946   // BernsteinCopulaFactory parameters //
947   addAsScalar("BernsteinCopulaFactory-alpha", 1.0);
948   addAsString("BernsteinCopulaFactory-BinNumberSelectionMethod", "LogLikelihood");
949   addAsUnsignedInteger("BernsteinCopulaFactory-kFraction", 2);
950   addAsUnsignedInteger("BernsteinCopulaFactory-MaxM", 1);
951   addAsUnsignedInteger("BernsteinCopulaFactory-MinM", 2);
952   addAsUnsignedInteger("BernsteinCopulaFactory-SamplingSize", 10000);
953 
954   // BurrFactory parameters //
955   addAsScalar("BurrFactory-AbsolutePrecision", 1.0e-12);
956   addAsScalar("BurrFactory-RelativePrecision", 1.0e-12);
957   addAsScalar("BurrFactory-ResidualPrecision", 1.0e-12);
958   addAsUnsignedInteger("BurrFactory-MaximumIteration", 10);
959 
960   // ConditionalDistribution parameters //
961   addAsUnsignedInteger("ConditionalDistribution-MarginalIntegrationNodesNumber", 256);
962   addAsUnsignedInteger("ConditionalDistribution-MaximumIntegrationNodesNumber", 100000);
963   addAsString("ConditionalDistribution-ContinuousDiscretizationMethod", "GaussProduct");
964 
965   // ComposedDistribution parameters //
966   addAsBool("ComposedDistribution-UseGenericCovarianceAlgorithm", false);
967 
968   // CompositeDistribution parameters //
969   addAsScalar("CompositeDistribution-SolverEpsilon", 1.0e-14);
970   addAsUnsignedInteger("CompositeDistribution-StepNumber", 256);
971 
972   // Dirichlet parameters //
973   addAsUnsignedInteger("Dirichlet-DefaultIntegrationSize", 50);
974   addAsUnsignedInteger("Dirichlet-DefaultSamplingSize", 500000);
975 
976   // DirichletFactory parameters //
977   addAsScalar("DirichletFactory-ParametersEpsilon", 1.0e-12);
978   addAsUnsignedInteger("DirichletFactory-MaximumIteration", 10);
979 
980   // DiscreteCompoundDistribution parameters //
981   addAsScalar("DiscreteCompoundDistribution-DefaultEpsilon", 1.0e-12);
982 
983   // ExtremeValueCopula parameters //
984   addAsBool("ExtremeValueCopula-CheckPickandFunction", true);
985   addAsUnsignedInteger("ExtremeValueCopula-CheckGridSize", 11);
986 
987   // FisherSnedecorFactory parameters //
988   addAsScalar("FisherSnedecorFactory-D1LowerBound", 1.0e-2);
989   addAsScalar("FisherSnedecorFactory-D2LowerBound", 1.0e-2);
990 
991   // FrechetFactory parameters //
992   addAsScalar("FrechetFactory-BoundMargin", 10.0);
993 
994   // GeneralizedExtremeValue parameters //
995   addAsScalar("GeneralizedExtremeValue-XiThreshold", 1.0e-6);
996 
997   // GeneralizedParetoFactory parameters //
998   addAsScalar("GeneralizedParetoFactory-MaximumAbsoluteError", 1.0e-10);
999   addAsScalar("GeneralizedParetoFactory-MaximumConstraintError", 1.0e-10);
1000   addAsScalar("GeneralizedParetoFactory-MaximumObjectiveError", 1.0e-10);
1001   addAsScalar("GeneralizedParetoFactory-MaximumRelativeError", 1.0e-10);
1002   addAsUnsignedInteger("GeneralizedParetoFactory-MaximumEvaluationNumber", 1000);
1003   addAsUnsignedInteger("GeneralizedParetoFactory-SmallSize", 20);
1004 
1005   // InverseNormalFactory parameters //
1006   addAsString("InverseNormalFactory-Method", "MLE");
1007 
1008   // KernelMixture parameters //
1009   addAsUnsignedInteger("KernelMixture-LargeSize", 20);
1010   addAsUnsignedInteger("KernelMixture-PDFCDFDiscretization", 1000);
1011   addAsUnsignedInteger("KernelMixture-SmallSize", 50);
1012 
1013   // KernelSmoothing parameters //
1014   addAsScalar("KernelSmoothing-AbsolutePrecision", 0.0);
1015   addAsScalar("KernelSmoothing-CutOffPlugin", 5.0);
1016   addAsScalar("KernelSmoothing-RelativePrecision", 1.0e-5);
1017   addAsScalar("KernelSmoothing-ResidualPrecision", 1.0e-10);
1018   addAsUnsignedInteger("KernelSmoothing-BinNumber", 1024);
1019   addAsUnsignedInteger("KernelSmoothing-MaximumIteration", 50);
1020   addAsUnsignedInteger("KernelSmoothing-SmallSize", 250);
1021 
1022   // LogNormal parameters //
1023   addAsScalar("LogNormal-CharacteristicFunctionSmallSigmaThreshold", 0.2);
1024   addAsUnsignedInteger("LogNormal-CharacteristicFunctionIntegrationNodes", 256);
1025 
1026   // LogNormalFactory parameters //
1027   addAsScalar("LogNormalFactory-AbsolutePrecision", 1.0e-12);
1028   addAsScalar("LogNormalFactory-RelativePrecision", 1.0e-12);
1029   addAsScalar("LogNormalFactory-ResidualPrecision", 1.0e-12);
1030   addAsUnsignedInteger("LogNormalFactory-EstimationMethod", 0);
1031   addAsUnsignedInteger("LogNormalFactory-MaximumIteration", 50);
1032 
1033   // Meixner parameters //
1034   addAsScalar("MeixnerDistribution-MaximumAbsoluteError", 1.0e-12);
1035   addAsScalar("MeixnerDistribution-MaximumConstraintError", 1.0e-12);
1036   addAsScalar("MeixnerDistribution-MaximumObjectiveError", 1.0e-12);
1037   addAsScalar("MeixnerDistribution-MaximumRelativeError", 1.0e-12);
1038   addAsUnsignedInteger("MeixnerDistribution-CDFDiscretization", 10000);
1039   addAsUnsignedInteger("MeixnerDistribution-CDFIntegrationNodesNumber", 32);
1040 
1041   // Mixture parameters //
1042   addAsScalar("Mixture-SmallWeight", 1.0e-12);
1043   addAsUnsignedInteger("Mixture-LargeSize", 20);
1044   addAsUnsignedInteger("Mixture-PDFCDFDiscretization", 1000);
1045   addAsUnsignedInteger("Mixture-SmallSize", 50);
1046 
1047   // Multinomial parameters //
1048   addAsScalar("Multinomial-eta", 1.0e-9);
1049   addAsScalar("Multinomial-smallA", 10.0);
1050 
1051   // NegativeBinomialFactory parameters //
1052   addAsScalar("NegativeBinomialFactory-AbsolutePrecision", 1.0e-12);
1053   addAsScalar("NegativeBinomialFactory-RelativePrecision", 1.0e-12);
1054   addAsScalar("NegativeBinomialFactory-ResidualPrecision", 1.0e-12);
1055   addAsUnsignedInteger("NegativeBinomialFactory-MaximumIteration", 50);
1056 
1057   // Normal parameters //
1058   addAsScalar("Normal-MaximumCDFEpsilon", 5.0e-6);
1059   addAsScalar("Normal-MinimumCDFEpsilon", 5.0e-2);
1060   addAsUnsignedInteger("Normal-MarginalIntegrationNodesNumber", 16);
1061   addAsUnsignedInteger("Normal-MaximumNumberOfPoints", 10000000);
1062   addAsUnsignedInteger("Normal-MinimumNumberOfPoints", 100000);
1063   addAsUnsignedInteger("Normal-SmallDimension", 6);
1064 
1065   // ParetoFactory parameters //
1066   addAsScalar("ParetoFactory-AlphaUpperBound", 1000.0);
1067 
1068   // ProductDistribution parameters //
1069   addAsScalar("ProductDistribution-LargeCharacteristicFunctionArgument", 10.0);
1070 
1071   // RiceFactory parameters //
1072   addAsScalar("RiceFactory-AbsolutePrecision", 1.0e-12);
1073   addAsScalar("RiceFactory-RelativePrecision", 1.0e-12);
1074   addAsScalar("RiceFactory-ResidualPrecision", 1.0e-12);
1075   addAsUnsignedInteger("RiceFactory-MaximumIteration", 10);
1076 
1077   // TrapezoidalFactory parameters //
1078   addAsScalar("TrapezoidalFactory-RhoBeg", 0.1);
1079   addAsScalar("TrapezoidalFactory-RhoEnd", 1.0e-5);
1080   addAsUnsignedInteger("TrapezoidalFactory-MaximumIteration", 2000);
1081 
1082   // TruncatedDistribution parameters //
1083   addAsScalar("TruncatedDistribution-DefaultThresholdRealization", 0.5);
1084 
1085   // TruncatedNormalFactory parameters //
1086   addAsScalar("TruncatedNormalFactory-SigmaLowerBound", 1.0e-4);
1087 
1088   // MaximumLikelihoodFactory parameters //
1089   addAsScalar("MaximumLikelihoodFactory-MaximumAbsoluteError", 1.0e-10);
1090   addAsScalar("MaximumLikelihoodFactory-MaximumConstraintError", 1.0e-10);
1091   addAsScalar("MaximumLikelihoodFactory-MaximumObjectiveError", 1.0e-10);
1092   addAsScalar("MaximumLikelihoodFactory-MaximumRelativeError", 1.0e-10);
1093   addAsString("MaximumLikelihoodFactory-DefaultOptimizationAlgorithm", "TNC");
1094   addAsUnsignedInteger("MaximumLikelihoodFactory-MaximumEvaluationNumber", 1000);
1095 
1096   // MethodOfMomentsFactory parameters //
1097   addAsScalar("MethodOfMomentsFactory-MaximumAbsoluteError", 1.0e-10);
1098   addAsScalar("MethodOfMomentsFactory-MaximumConstraintError", 1.0e-10);
1099   addAsScalar("MethodOfMomentsFactory-MaximumObjectiveError", 1.0e-10);
1100   addAsScalar("MethodOfMomentsFactory-MaximumRelativeError", 1.0e-10);
1101   addAsUnsignedInteger("MethodOfMomentsFactory-MaximumEvaluationNumber", 1000);
1102 
1103   // Student parameters //
1104   addAsScalar("Student-MaximumCDFEpsilon", 5.0e-6);
1105   addAsScalar("Student-MinimumCDFEpsilon", 5.0e-2);
1106   addAsUnsignedInteger("Student-MarginalIntegrationNodesNumber", 16);
1107   addAsUnsignedInteger("Student-MaximumNumberOfPoints", 10000000);
1108   addAsUnsignedInteger("Student-MinimumNumberOfPoints", 100000);
1109   addAsUnsignedInteger("Student-SmallDimension", 6);
1110 
1111   // StudentFactory parameters //
1112   addAsScalar("StudentFactory-NuMax", 1.0e3);
1113 
1114   // NonCentralStudent parameters //
1115   addAsUnsignedInteger("NonCentralStudent-CDFAlgo", 0);
1116 
1117   // UserDefined parameters //
1118   addAsUnsignedInteger("UserDefined-SmallSize", 10000);
1119 
1120   // VonMisesFactory parameters //
1121   addAsScalar("VonMisesFactory-AbsolutePrecision", 1.0e-12);
1122   addAsScalar("VonMisesFactory-RelativePrecision", 1.0e-12);
1123   addAsScalar("VonMisesFactory-ResidualPrecision", 1.0e-12);
1124   addAsUnsignedInteger("VonMisesFactory-MaximumIteration", 10);
1125 
1126   // AliMikhailHaqCopulaFactory parameters //
1127   addAsScalar("AliMikhailHaqCopulaFactory-ThetaEpsilon", 1.0e-14);
1128 
1129   // FrankCopulaFactory parameters //
1130   addAsScalar("FrankCopulaFactory-AbsolutePrecision", 1.0e-14);
1131   addAsScalar("FrankCopulaFactory-RelativePrecision", 1.0e-14);
1132   addAsScalar("FrankCopulaFactory-ResidualPrecision", 1.0e-14);
1133   addAsUnsignedInteger("FrankCopulaFactory-MaximumIteration", 100);
1134 
1135   // RandomMixture parameters //
1136   addAsBool("RandomMixture-SimplifyAtoms", true);
1137   addAsScalar("RandomMixture-DefaultAlpha", 5.0);
1138   addAsScalar("RandomMixture-DefaultBeta", 8.5);
1139   addAsScalar("RandomMixture-DefaultCDFEpsilon", 1.0e-10);
1140   addAsScalar("RandomMixture-DefaultPDFEpsilon", 1.0e-10);
1141   addAsScalar("RandomMixture-GraphCDFEpsilon", 1.0e-5);
1142   addAsScalar("RandomMixture-GraphPDFEpsilon", 1.0e-5);
1143   addAsUnsignedInteger("RandomMixture-DefaultBlockMax", 16);
1144   addAsUnsignedInteger("RandomMixture-DefaultBlockMin", 3);
1145   addAsUnsignedInteger("RandomMixture-DefaultMaxSize", 65536);
1146   addAsUnsignedInteger("RandomMixture-MarginalIntegrationNodesNumber", 128);
1147   addAsUnsignedInteger("RandomMixture-MaximumIntegrationNodesNumber", 1024);
1148   addAsUnsignedInteger("RandomMixture-MaximumSupportSize", 2048);
1149   addAsUnsignedInteger("RandomMixture-ProjectionDefaultSize", 25);
1150   addAsUnsignedInteger("RandomMixture-SmallSize", 100);
1151 
1152   // Evaluation parameters //
1153   addAsScalar("Evaluation-ParameterEpsilon", 1.0e-7);
1154   addAsUnsignedInteger("Evaluation-DefaultPointNumber", 129);
1155 
1156   // DualLinearCombinationEvaluation //
1157   addAsScalar("DualLinearCombinationEvaluation-SmallCoefficient", 0.0);
1158 
1159   // LinearCombinationEvaluation //
1160   addAsScalar("LinearCombinationEvaluation-SmallCoefficient", 0.0);
1161 
1162   // DistFunc parameters //
1163   addAsScalar("DistFunc-Precision", 1.0e-14);
1164   addAsUnsignedInteger("DistFunc-MaximumIteration", 5000);
1165 
1166   // KFactor parameters //
1167   addAsScalar("KFactor-Precision", 1.0e-8);
1168   addAsUnsignedInteger("KFactor-DefaultIntegrationNodesNumber", 256);
1169   addAsUnsignedInteger("KFactor-MaximumIteration", 32);
1170 
1171   // RootStrategyImplementation parameters //
1172   addAsScalar("RootStrategy-DefaultMaximumDistance", 8.0);
1173   addAsScalar("RootStrategy-DefaultStepSize", 1.0);
1174 
1175   // SimulationAlgorithm parameters //
1176   addAsScalar("SimulationAlgorithm-DefaultMaximumCoefficientOfVariation", 1.0e-1);
1177   addAsScalar("SimulationAlgorithm-DefaultMaximumStandardDeviation", 0.0);
1178   addAsUnsignedInteger("SimulationAlgorithm-DefaultBlockSize", 1);
1179   addAsUnsignedInteger("SimulationAlgorithm-DefaultMaximumOuterSampling", 1000);
1180 
1181   // ProbabilitySimulationResult parameters //
1182   addAsBool("ProbabilitySimulationResult-CheckPositiveVariance", false);
1183   addAsScalar("ProbabilitySimulationResult-DefaultConfidenceLevel", 0.95);
1184 
1185   // ExpectationSimulationAlgorithm parameters //
1186   addAsString("ExpectationSimulationAlgorithm-DefaultCoefficientOfVariationCriterionType", "MAX");
1187   addAsString("ExpectationSimulationAlgorithm-DefaultStandardDeviationCriterionType", "NONE");
1188 
1189   // SobolSimulationAlgorithm parameters //
1190   addAsScalar("SobolSimulationAlgorithm-DefaultIndexQuantileLevel", 0.05);
1191   addAsScalar("SobolSimulationAlgorithm-DefaultIndexQuantileEpsilon", 1e-2);
1192   addAsUnsignedInteger("SobolSimulationAlgorithm-DefaultBlockSize", 1000);
1193   addAsUnsignedInteger("SobolSimulationAlgorithm-DefaultBatchSize", 1);
1194 
1195   // SimulationSensitivityAnalysis parameters //
1196   addAsUnsignedInteger("SimulationSensitivityAnalysis-DefaultSampleMargin", 400);
1197 
1198   // SubsetSampling parameters //
1199   addAsScalar("SubsetSampling-DefaultBetaMin", 2.0);
1200   addAsScalar("SubsetSampling-DefaultConditionalProbability", 0.1);
1201   addAsScalar("SubsetSampling-DefaultProposalRange", 2.0);
1202   addAsUnsignedInteger("SubsetSampling-DefaultMaximumOuterSampling", 10000);
1203 
1204   // DirectionalSampling parameters //
1205   addAsUnsignedInteger("DirectionalSampling-MeanContributionIntegrationNodesNumber", 255);
1206 
1207   // AdaptiveDirectionalStratification parameters //
1208   addAsScalar("AdaptiveDirectionalStratification-DefaultGamma", 0.5);
1209   addAsUnsignedInteger("AdaptiveDirectionalStratification-DefaultMaximumStratificationDimension", 3);
1210   addAsUnsignedInteger("AdaptiveDirectionalStratification-DefaultNumberOfSteps", 2);
1211 
1212   // AnalyticalResult parameters //
1213   addAsScalar("AnalyticalResult-DefaultWidth", 1.0);
1214   addAsUnsignedInteger("AnalyticalResult-MeanPointIntegrationNodesNumber", 255);
1215 
1216   // SystemFORM parameters //
1217   addAsScalar("SystemFORM-MaximalScaling", 1.0e5);
1218   addAsScalar("SystemFORM-StartingScaling", 1.0e-13);
1219 
1220   // MultiFORM parameters //
1221   addAsScalar("MultiFORM-DefaultGamma", 1.1);
1222   addAsScalar("MultiFORM-DefaultDelta", 0.75);
1223   addAsUnsignedInteger("MultiFORM-DefaultMaximumDesignPointsNumber", 4);
1224 
1225   // StrongMaximumTest parameters //
1226   addAsScalar("StrongMaximumTest-DefaultDeltaPrecision", 1.0e-7);
1227   addAsScalar("StrongMaximumTest-Epsilon", 1.0e-10);
1228 
1229   // CleaningStrategy parameters //
1230   addAsScalar("CleaningStrategy-DefaultSignificanceFactor", 1.0e-4);
1231   addAsUnsignedInteger("CleaningStrategy-DefaultMaximumSize", 20);
1232 
1233   // MetaModelAlgorithm parameters //
1234   addAsScalar("MetaModelAlgorithm-PValueThreshold", 1.0e-3);
1235   addAsString("MetaModelAlgorithm-ModelSelectionCriterion", "BIC");
1236   addAsString("MetaModelAlgorithm-NonParametricModel", "Histogram");
1237 
1238   // FunctionalChaosAlgorithm parameters //
1239   addAsScalar("FunctionalChaosAlgorithm-DefaultMaximumResidual", 1.0e-6);
1240   addAsScalar("FunctionalChaosAlgorithm-QNorm", 0.5);
1241   addAsUnsignedInteger("FunctionalChaosAlgorithm-LargeSampleSize", 10000);
1242   addAsUnsignedInteger("FunctionalChaosAlgorithm-MaximumTotalDegree", 10);
1243   addAsUnsignedInteger("FunctionalChaosAlgorithm-SmallSampleSize", 1000);
1244 
1245   // FunctionalChaosSobolIndices parameters //
1246   addAsScalar("FunctionalChaosSobolIndices-VariancePartThreshold", 1.0e-2);
1247 
1248   // LinearModelAlgorithm parameters //
1249   addAsString("LinearModelAlgorithm-DecompositionMethod", "QR");
1250   addAsUnsignedInteger("LinearModelAnalysis-Identifiers", 3);
1251 
1252   // LinearModelStepwiseAlgorithm parameters //
1253   addAsScalar("LinearModelStepwiseAlgorithm-Penalty", 2.0);
1254   addAsUnsignedInteger("LinearModelStepwiseAlgorithm-MaximumIterationNumber", 1000);
1255 
1256   // GeneralLinearModelAlgorithm parameters //
1257   addAsBool("GeneralLinearModelAlgorithm-KeepCovariance", true);
1258   addAsBool("GeneralLinearModelAlgorithm-OptimizeParameters", true);
1259   addAsBool("GeneralLinearModelAlgorithm-UnbiasedVariance", true);
1260   addAsBool("GeneralLinearModelAlgorithm-UseAnalyticalAmplitudeEstimate", true);
1261   addAsScalar("GeneralLinearModelAlgorithm-DefaultOptimizationLowerBound", 1.0e-2);
1262   addAsScalar("GeneralLinearModelAlgorithm-DefaultOptimizationScaleFactor", 2.0);
1263   addAsScalar("GeneralLinearModelAlgorithm-DefaultOptimizationUpperBound", 1.0e2);
1264   addAsScalar("GeneralLinearModelAlgorithm-MaximalScaling", 1.0e5);
1265   addAsScalar("GeneralLinearModelAlgorithm-MeanEpsilon", 1.0e-12);
1266   addAsScalar("GeneralLinearModelAlgorithm-StartingScaling", 1.0e-13);
1267   addAsString("GeneralLinearModelAlgorithm-DefaultOptimizationAlgorithm", "TNC");
1268   addAsString("GeneralLinearModelAlgorithm-LinearAlgebra", "LAPACK");
1269 
1270   // KrigingAlgorithm parameters //
1271   addAsScalar("KrigingAlgorithm-MaximalScaling", 1.0e5);
1272   addAsScalar("KrigingAlgorithm-StartingScaling", 1.0e-13);
1273   addAsString("KrigingAlgorithm-LinearAlgebra", "LAPACK");
1274 
1275   // SquaredExponential parameters //
1276   addAsScalar("SquaredExponential-DefaultTheta", 1.0);
1277 
1278   // AbsoluteExponential parameters //
1279   addAsScalar("AbsoluteExponential-DefaultTheta", 1.0);
1280 
1281   // GeneralizedExponential parameters //
1282   addAsScalar("GeneralizedExponential-DefaultTheta", 1.0);
1283 
1284   // MaternModel parameters //
1285   addAsScalar("MaternModel-DefaultNu", 1.5);
1286   addAsScalar("MaternModel-DefaultTheta", 1.0);
1287 
1288   // WeightedExperimentImplementation parameters //
1289   addAsUnsignedInteger("WeightedExperiment-DefaultSize", 100);
1290 
1291   // GaussProductExperiment parameters //
1292   addAsUnsignedInteger("GaussProductExperiment-DefaultMarginalDegree", 5);
1293 
1294   // HyperbolicAnisotropicEnumerateFunction parameters //
1295   addAsScalar("HyperbolicAnisotropicEnumerateFunction-DefaultQ", 0.4);
1296 
1297   // MarginalTransformationEvaluation parameters //
1298   addAsBool("MarginalTransformationEvaluation-Simplify", true);
1299   addAsScalar("MarginalTransformationEvaluation-DefaultTailThreshold", 0.99);
1300   addAsScalar("MarginalTransformationEvaluation-ParametersEpsilon", 1.0e-14);
1301 
1302   // DistributionImplementation parameters //
1303   addAsBool("Distribution-MinimumVolumeLevelSetBySampling", false);
1304   addAsBool("Distribution-Parallel", true);
1305   addAsBool("Distribution-ScaleColorsDiscretePDF", true);
1306   addAsBool("Distribution-ShowSupportDiscretePDF", true);
1307   addAsBool("Distribution-UseCovarianceAdaptiveAlgorithm", true);
1308   addAsScalar("Distribution-QMin", 0.15);
1309   addAsScalar("Distribution-QMax", 0.85);
1310   addAsScalar("Distribution-DefaultQuantileEpsilon", 1.0e-12);
1311   addAsScalar("Distribution-DefaultPDFEpsilon", 1.0e-14);
1312   addAsScalar("Distribution-DefaultCDFEpsilon", 1.0e-14);
1313   addAsScalar("Distribution-DiscreteDrawPDFScaling", 0.25);
1314   addAsString("Distribution-EntropySamplingMethod", "MonteCarlo");
1315   addAsUnsignedInteger("Distribution-CharacteristicFunctionBlockMax", 20);
1316   addAsUnsignedInteger("Distribution-CharacteristicFunctionNMax", 1000000);
1317   addAsUnsignedInteger("Distribution-DefaultIntegrationNodesNumber", 255);
1318   addAsUnsignedInteger("Distribution-DefaultLevelNumber", 10);
1319   addAsUnsignedInteger("Distribution-DefaultPointNumber", 129);
1320   addAsUnsignedInteger("Distribution-DefaultQuantileCacheSize", 128);
1321   addAsUnsignedInteger("Distribution-DefaultQuantileIteration", 100);
1322   addAsUnsignedInteger("Distribution-EntropySamplingSize", 524288);
1323   addAsUnsignedInteger("Distribution-MinimumVolumeLevelSetSamplingSize", 16384);
1324   addAsUnsignedInteger("Distribution-SmallDimensionEntropy", 3);
1325   addAsString("Distribution-RoughnessSamplingMethod", "MonteCarlo");
1326   addAsUnsignedInteger("Distribution-RoughnessSamplingSize", 524288);
1327   addAsUnsignedInteger("Distribution-SmallDimensionRoughness", 3);
1328 
1329   // ContinuousDistribution parameters //
1330   addAsUnsignedInteger("ContinuousDistribution-DefaultIntegrationNodesNumber", 256);
1331 
1332   // DiscreteDistribution parameters //
1333   addAsScalar("DiscreteDistribution-SupportEpsilon", 1.0e-14);
1334 
1335   // DiscreteMarkovChain parameters //
1336   addAsString("DiscreteMarkovChain-DOTArcColor", "black");
1337   addAsString("DiscreteMarkovChain-DOTLayout", "dot");
1338   addAsString("DiscreteMarkovChain-DOTNodeColor", "black");
1339   addAsString("DiscreteMarkovChain-DOTNodeShape", "oval");
1340   addAsScalar("DiscreteMarkovChain-ProbabilitySumPrecision", 1.0e-6);
1341 
1342   // DistributionFactoryImplementation parameters //
1343   addAsScalar("DistributionFactory-BootstrapErrorTolerance", 0.1);
1344   addAsUnsignedInteger("DistributionFactory-DefaultBootstrapSize", 100);
1345 
1346   // OrderStatisticsMarginalChecker //
1347   addAsScalar("OrderStatisticsMarginalChecker-OptimizationEpsilon", 1.0e-7);
1348   addAsUnsignedInteger("OrderStatisticsMarginalChecker-QuantileIteration", 100);
1349 
1350   // MaximumEntropyOrderStatisticsDistribution //
1351   addAsBool("MaximumEntropyOrderStatisticsDistribution-CheckMarginals", true);
1352   addAsBool("MaximumEntropyOrderStatisticsDistribution-UseApproximation", false);
1353   addAsScalar("MaximumEntropyOrderStatisticsDistribution-SupportShift", 1.0e-15);
1354   addAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-CDFIntegrationNodesNumber", 16);
1355   addAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-ExponentialFactorDiscretization", 100);
1356   addAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-MaximumApproximationSubdivision", 2);
1357   addAsUnsignedInteger("MaximumEntropyOrderStatisticsDistribution-MaximumQuantileIteration", 10);
1358 
1359   // HMatrix parameters //
1360   addAsBool("HMatrix-ForceSequential", false);
1361   addAsScalar("HMatrix-AdmissibilityFactor", 100.0);
1362   addAsScalar("HMatrix-AssemblyEpsilon", 1.0e-4);
1363   addAsScalar("HMatrix-LargestEigenValueRelativeError", 1.0e-1);
1364   addAsScalar("HMatrix-RecompressionEpsilon", 1.0e-4);
1365   addAsScalar("HMatrix-ValidationError", 0.0);
1366   addAsString("HMatrix-ClusteringAlgorithm", "median");
1367   addAsString("HMatrix-CompressionMethod", "AcaRandom");
1368   addAsUnsignedInteger("HMatrix-FactorizationIterations", 10);
1369   addAsUnsignedInteger("HMatrix-LargestEigenValueIterations", 10);
1370   addAsUnsignedInteger("HMatrix-MaxLeafSize", 250);
1371   addAsUnsignedInteger("HMatrix-ValidationDump", 0);
1372   addAsUnsignedInteger("HMatrix-ValidationRerun", 0);
1373 
1374   // GaussianProcess parameters //
1375   addAsScalar("GaussianProcess-MaximalScaling", 1.0e5);
1376   addAsScalar("GaussianProcess-StartingScaling", 1.0e-13);
1377   addAsUnsignedInteger("GaussianProcess-GibbsMaximumIteration", 100);
1378 
1379   // SpectralGaussianProcess parameters //
1380   addAsScalar("SpectralGaussianProcess-StartingScaling", 1.0e-13);
1381   addAsScalar("SpectralGaussianProcess-MaximalScaling", 1.0e5);
1382   addAsUnsignedInteger("SpectralGaussianProcess-CholeskyCacheSize", 16384);
1383 
1384   // WhittleFactory parameters //
1385   addAsScalar("WhittleFactory-DefaultRhoBeg", 0.1);
1386   addAsScalar("WhittleFactory-DefaultRhoEnd", 1.0e-10);
1387   addAsScalar("WhittleFactory-DefaultStartingPointScale", 1.0);
1388   addAsScalar("WhittleFactory-RootEpsilon", 1.0e-6);
1389   addAsUnsignedInteger("WhittleFactory-DefaultMaximumEvaluationNumber", 2000);
1390 
1391   // BoxCoxFactory parameters //
1392   addAsScalar("BoxCoxFactory-DefaultRhoBeg", 0.1);
1393   addAsScalar("BoxCoxFactory-DefaultRhoEnd", 1.0e-10);
1394   addAsUnsignedInteger("BoxCoxFactory-DefaultMaximumEvaluationNumber", 2000);
1395   addAsUnsignedInteger("BoxCoxFactory-DefaultPointNumber", 201);
1396 
1397   // VisualTest parameters //
1398   addAsUnsignedInteger("VisualTest-KendallPlot-MonteCarloSize", 100);
1399 
1400   // CalibrationStrategyImplementation parameters //
1401   addAsScalar("CalibrationStrategy-DefaultExpansionFactor", 1.2);
1402   addAsScalar("CalibrationStrategy-DefaultLowerBound", 0.117); // = 0.5 * 0.234
1403   addAsScalar("CalibrationStrategy-DefaultShrinkFactor", 0.8);
1404   addAsScalar("CalibrationStrategy-DefaultUpperBound", 0.468); // = 2.0 * 0.234
1405   addAsUnsignedInteger("CalibrationStrategy-DefaultCalibrationStep", 100);
1406 
1407   // MCMC parameters //
1408   addAsUnsignedInteger("MCMC-DefaultBurnIn", 0);
1409   addAsUnsignedInteger("MCMC-DefaultThinning", 1);
1410 
1411   // GaussianLinearCalibration parameters //
1412   addAsString("GaussianLinearCalibration-Method", "QR");
1413 
1414   // LinearLeastSquaresCalibration parameters //
1415   addAsScalar("LinearLeastSquaresCalibration-Regularization", 1e-12);
1416   addAsString("LinearLeastSquaresCalibration-Method", "QR");
1417 
1418   // NonLinearLeastSquaresCalibration parameters //
1419   addAsUnsignedInteger("NonLinearLeastSquaresCalibration-BootstrapSize", 100);
1420   addAsUnsignedInteger("NonLinearLeastSquaresCalibration-MultiStartSize", 100);
1421 
1422   // GaussianNonLinearCalibration parameters //
1423   addAsUnsignedInteger("GaussianNonLinearCalibration-BootstrapSize", 100);
1424   addAsUnsignedInteger("GaussianNonLinearCalibration-MultiStartSize", 100);
1425 
1426   // ARMA parameters //
1427   addAsScalar("ARMA-MeanEpsilon", 1.0e-14);
1428 
1429   // ARMALikelihoodFactory parameters //
1430   addAsScalar("ARMALikelihoodFactory-DefaultRhoBeg", 0.01);
1431   addAsScalar("ARMALikelihoodFactory-DefaultRhoEnd", 1.0e-10);
1432   addAsScalar("ARMALikelihoodFactory-DefaultStartingPointScale", 1.0);
1433   addAsScalar("ARMALikelihoodFactory-MaximalScaling", 1.0e5);
1434   addAsScalar("ARMALikelihoodFactory-RootEpsilon", 1.0e-6);
1435   addAsScalar("ARMALikelihoodFactory-StartingScaling", 1.0e-13);
1436   addAsUnsignedInteger("ARMALikelihoodFactory-DefaultMaximumEvaluationNumber", 10000);
1437 
1438   // FittingTest parameters //
1439   addAsBool("FittingTest-ChiSquaredCheckSample", true);
1440   addAsScalar("FittingTest-LillieforsPrecision", 0.01);
1441   addAsUnsignedInteger("FittingTest-ChiSquaredMinimumBinCount", 5);
1442   addAsUnsignedInteger("FittingTest-LillieforsMinimumSamplingSize", 10);
1443   addAsUnsignedInteger("FittingTest-LillieforsMaximumSamplingSize", 100000);
1444 
1445   // PenalizedLeastSquaresAlgorithm parameters //
1446   addAsBool("PenalizedLeastSquaresAlgorithm-UseNormal", false);
1447 
1448   // LeastSquaresMetaModelSelection parameters //
1449   addAsScalar("LeastSquaresMetaModelSelection-ErrorThreshold", 0.0);
1450   addAsScalar("LeastSquaresMetaModelSelection-MaximumError", 0.5);
1451   addAsScalar("LeastSquaresMetaModelSelection-MaximumErrorFactor", 2.0);
1452   addAsString("LeastSquaresMetaModelSelection-DecompositionMethod", "SVD");
1453 
1454   // SparseMethod parameters //
1455   addAsScalar("SparseMethod-ErrorThreshold", 1.0e-3);
1456   addAsScalar("SparseMethod-MaximumErrorFactor", 2.0);
1457 
1458   // CholeskyMethod parameters //
1459   addAsUnsignedInteger("CholeskyMethod-LargeCase", 128);
1460 
1461   // Classifier parameters //
1462   addAsBool("Classifier-Parallel", true);
1463 
1464   // TensorApproximationAlgorithm parameters //
1465   addAsScalar("TensorApproximationAlgorithm-DefaultMaximumRadiusError", 1.0e-5);
1466   addAsScalar("TensorApproximationAlgorithm-DefaultMaximumResidualError", 1.0e-5);
1467   addAsString("TensorApproximationAlgorithm-DecompositionMethod", "SVD");
1468   addAsString("TensorApproximationAlgorithm-Method", "GreedyRankOne");
1469   addAsUnsignedInteger("TensorApproximationAlgorithm-DefaultMaximumAlternatingLeastSquaresIteration", 100);
1470 
1471   // viewer.View parameters //
1472   addAsString("View-ImageFormat", "png");
1473 }
1474 
reload()1475 void ResourceMap::reload()
1476 {
1477   std::vector<String> allKeys(getKeys());
1478   for (UnsignedInteger i = 0; i < allKeys.size(); ++ i)
1479     removeKey(allKeys[i]);
1480   loadDefaultConfiguration();
1481   loadConfigurationFile();
1482 }
1483 
1484 /** Get the list of keys associated to a class */
findKeys(const String & substr)1485 std::vector<String> ResourceMap::findKeys(const String & substr)
1486 {
1487   std::vector<String> allKeys(getKeys());
1488   std::vector<String> result;
1489   for (UnsignedInteger i = 0; i < allKeys.size(); ++ i)
1490   {
1491     if(allKeys[i].find(substr) != std::string::npos)
1492       result.push_back(allKeys[i]);
1493   }
1494   return result;
1495 }
1496 
1497 /* String converter */
__repr__() const1498 String ResourceMap::__repr__() const
1499 {
1500   // First, build a global map to sort keys
1501   MapStringType globalMap(mapString_);
1502   for (MapScalarType::const_iterator it = mapScalar_.begin(); it != mapScalar_.end(); ++it)
1503     globalMap[it->first] = Get(it->first);
1504   for (MapUnsignedIntegerType::const_iterator it = mapUnsignedInteger_.begin(); it != mapUnsignedInteger_.end(); ++it)
1505     globalMap[it->first] = Get(it->first);
1506   for (MapBoolType::const_iterator it = mapBool_.begin(); it != mapBool_.end(); ++it)
1507     globalMap[it->first] = Get(it->first);
1508   OSS oss;
1509   oss << "ResourceMap={";
1510   const char * separator = "\n  ";
1511   for(MapStringType::const_iterator it = globalMap.begin(); it != globalMap.end(); ++it, separator = ",\n  ")
1512     oss << separator
1513         << it->first << " => " << it->second;
1514   oss << "\n}";
1515   return oss;
1516 }
1517 
getKeys() const1518 std::vector<String> ResourceMap::getKeys() const
1519 {
1520   // Initialize with the string keys
1521   std::vector<String> keys(getStringKeys());
1522   // Append the scalar keys
1523   {
1524     std::vector<String> scalarKeys(getScalarKeys());
1525     keys.insert(keys.end(), scalarKeys.begin(), scalarKeys.end());
1526   }
1527   // Append the unsigned integer keys
1528   {
1529     std::vector<String> unsignedIntegerKeys(getUnsignedIntegerKeys());
1530     keys.insert(keys.end(), unsignedIntegerKeys.begin(), unsignedIntegerKeys.end());
1531   }
1532   // Append the bool keys
1533   {
1534     std::vector<String> boolKeys(getBoolKeys());
1535     keys.insert(keys.end(), boolKeys.begin(), boolKeys.end());
1536   }
1537   // Then sort the keys
1538   std::sort(keys.begin(), keys.end());
1539   return keys;
1540 }
1541 
getStringKeys() const1542 std::vector<String> ResourceMap::getStringKeys() const
1543 {
1544   std::vector<String> keys;
1545   for(MapStringType::const_iterator it = mapString_.begin(); it != mapString_.end(); ++it)
1546   {
1547     keys.push_back(it->first);
1548   }
1549   return keys;
1550 }
1551 
getBoolKeys() const1552 std::vector<String> ResourceMap::getBoolKeys() const
1553 {
1554   std::vector<String> keys;
1555   for(MapBoolType::const_iterator it = mapBool_.begin(); it != mapBool_.end(); ++it)
1556   {
1557     keys.push_back(it->first);
1558   }
1559   return keys;
1560 }
1561 
getScalarKeys() const1562 std::vector<String> ResourceMap::getScalarKeys() const
1563 {
1564   std::vector<String> keys;
1565   for(MapScalarType::const_iterator it = mapScalar_.begin(); it != mapScalar_.end(); ++it)
1566   {
1567     keys.push_back(it->first);
1568   }
1569   return keys;
1570 }
1571 
getUnsignedIntegerKeys() const1572 std::vector<String> ResourceMap::getUnsignedIntegerKeys() const
1573 {
1574   std::vector<String> keys;
1575   for(MapUnsignedIntegerType::const_iterator it = mapUnsignedInteger_.begin(); it != mapUnsignedInteger_.end(); ++it)
1576   {
1577     keys.push_back(it->first);
1578   }
1579   return keys;
1580 }
1581 
1582 /*
1583  * @fn std::ostream & operator <<(std::ostream & os, const ResourceMap & obj)
1584  * @brief Output stream converter
1585  * @param os A STL output stream resourceMap
1586  * @param obj The resourceMap read by \em os
1587  * @return A reference to \em os
1588  *
1589  * Operator << converts the ResourceMap object to an output stream
1590  * so it is easy to show the content of the resourceMap.
1591  */
operator <<(std::ostream & os,const MutexLockSingleton<ResourceMap> & obj)1592 std::ostream & operator <<(std::ostream & os, const MutexLockSingleton<ResourceMap> & obj)
1593 {
1594   return os << obj.lock().__repr__();
1595 }
1596 
operator <<(OStream & OS,const MutexLockSingleton<ResourceMap> & obj)1597 OStream & operator <<(OStream & OS, const MutexLockSingleton<ResourceMap> & obj)
1598 {
1599   return OS << obj.lock().__repr__();
1600 }
1601 
1602 
1603 
1604 
1605 
1606 END_NAMESPACE_OPENTURNS
1607